Salut tout le monde, ici AL. Bienvenue dans le premier aperçu des coulisses de Mortumus.
Pendant que Fin est enterré dans les mines serveur, luttant avec les bases de données, les abonnements et toute la sorcellerie effrayante des systèmes distribués qui maintient le monde en vie, c'est moi de l'autre côté qui m'assure que chaque coup d'épée, chaque pas, chaque vacillement de torche et chaque pièce d'armure ait vraiment l'air et se sente bien sur ton écran.
Construire un MMO dark fantasy, ce n'est pas le genre de truc qu'on assemble en glissant-déposant depuis un asset store. Le feeling brut et oldschool qu'on recherche (le poids du combat, le grincement de ton armure, l'effroi de voir un autre joueur à l'horizon) n'émerge que quand les outils en dessous sont construits spécifiquement pour ça. Alors aujourd'hui, je tire le rideau sur quelques-uns des systèmes Unity custom qu'on a bricolés côté client : ceux que personne ne verra jamais, mais que tout le monde ressentira.
C'est parti.
Visuels, Loot et vie privée en PvP
S'il y a une vérité sur les joueurs de MMO, c'est celle-ci : on adore le stuff. Et dans un jeu full loot PvP comme Mortumus, le stuff n'est pas juste un shoot de dopamine, c'est de l'information. Ce que quelqu'un porte te dit ce qu'il peut te faire.
Garde-le secret, garde-le en sûreté : Equipment Visualizer
Très tôt, on a réalisé qu'on avait un problème que beaucoup de MMOs ignorent en silence : si le client connaît l'ID exact de chaque pièce d'équipement sur chaque joueur visible, un tricheur déterminé peut extraire ça de la mémoire et connaître tes stats exactes avant de décider de te tomber dessus.
Alors, notre Equipment Visualizer fait quelque chose d'un peu paranoïaque. Pour ton propre personnage, il lit depuis le service d'équipement complet : tu vois tout sur ton stuff. Mais pour chaque autre joueur, il ne lit qu'un blob "visuels" allégé que le serveur publie. Tu vois l'épée, pas la fiche de stats. Les IDs des items des inconnus ne quittent tout simplement jamais le serveur de Fin.
C'est un petit truc. Ça rend aussi les cheats de memory scraping beaucoup moins utiles. Bon deal.
La pile d'animations
Le combat skill-based, ça vit ou ça meurt sur l'animation. Si le windup n'est pas lisible, tu ne peux pas réagir. Si le coup ne connecte pas, le combat semble flotter. Si la mort ressemble au modèle qui... s'éteint, tu perds la moitié de l'ambiance.
Player Animation Coordinator
On a commencé comme la plupart des gens : une classe de contrôleur d'animation gigantesque qui essaie de tout gérer. Mouvements, sorts, mort, coups, idles, tout dans le même fichier. Au bout d'environ deux semaines, c'était le bazar.
Alors, on a tout découpé. Maintenant, le Player Animation Coordinator est un tout petit point d'entrée qui lance une pile de petits modules spécialisés : mouvement, rotation, attaque, sort, réactions aux coups, mort, idles. Chacun fait un seul boulot. Chacun est lisible tout seul. Les bugs prennent des minutes au lieu d'heures à traquer.
Du code plus propre pour moi. Un combat plus serré pour toi.
Réactivité du combat : Attack Animator & Spell Animator
Voici le problème classique du MMO : le combat server-authoritative est le seul moyen de stopper la triche, mais attendre que le serveur confirme chaque incantation, c'est la mélasse.
Notre Spell Animator triche un peu, mais honnêtement. Quand tu appuies sur ta touche de sort, l'animation de cast joue immédiatement, prédite localement, pour que ça semble instantané. Ensuite, le serveur de Fin valide si le cast était réellement légal (cooldown écoulé, assez de mana, cible valide, etc.). S'il confirme, rien ne change. S'il rejette, on sort proprement de l'animation.
L'Attack Animator fait la même danse pour le corps à corps, et il adapte même la vitesse du swing pour correspondre à la cadence que le serveur indique pour ton arme. Tes yeux voient un combat réactif. Le serveur voit un monde qu'on ne peut pas tromper.
Ce point d'équilibre entre "ça se sent bien" et "c'est fair-play" est l'endroit exact où tout ce jeu vit.
Les sons du royaume
L'audio, c'est 50% de l'ambiance, et les gens sous-estiment toujours combien de travail ça demande.
Poser l'atmosphère : Audio Manager & Music Region System
Les jeux traditionnels changent la musique en coupant net quand tu franchis une ligne invisible. C'est brutal. Nous, on le fait avec des zones polygonales 3D. Le Music Region System nous permet de peindre des zones de forme arbitraire dans le monde (un bosquet hanté, une chapelle maudite, l'approche d'un boss), et quand tu entres et sors, l'Audio Manager fait un crossfade de la bande-son en douceur. Pas de coupures. Pas de redémarrage du même morceau si tu as juste effleuré la limite.
Et comme tout ça passe par des sources audio poolées avec du routage par groupe de mixage, ça ne coûte pratiquement rien en budget de frames.
Le Character Audio Manager
Chaque pas dans Mortumus est lié à l'animation de ton personnage et à la surface sous tes pieds : la pierre sonne comme de la pierre, la boue sonne comme de la boue. Les sons de sorts sont liés à la capacité, les swings d'arme à l'arme. Le Character Audio Manager se place entre les événements d'animation et l'Audio Manager pour qu'on puisse changer les packs SFX par race/classe sans toucher au code gameplay.
Des petites choses. Beaucoup d'entre elles. Elles s'additionnent.
Au bord de l'eau
Chaque monde dark fantasy a de l'eau. Des marais, des rivières, des ruines inondées, la mer au bout d'un cap maudit. Et l'eau, c'est un de ces trucs qui a l'air faux très facilement, surtout là où elle rencontre la terre. Cette affreuse ligne d'eau polygonale où le mesh croise le terrain, c'est la marque d'un jeu qui fait cheap.
Notre base d'eau
On n'a pas construit notre eau de zéro. Unity fournit en fait un projet de démo fantastique appelé Boat Attack qui inclut un des meilleurs systèmes d'eau URP disponibles : vraies réflexions, réfractions, flottabilité, tout le toutim. Alors, on est partis du système d'eau de Boat Attack comme fondation, parce que réinventer la roue nous aurait coûté des mois sans réel bénéfice.
Mais Boat Attack a été conçu pour, eh bien... des bateaux. De belles lignes côtières océaniques bien propres. Le comportement côtier qui rend super bien sur une plage de sable rend horriblement mal autour des cours d'eau boueux, couverts de roseaux et irréguliers qu'on veut vraiment dans Mortumus. Alors, il a fallu opérer chirurgicalement.
Le shader custom : Water Shoreline
Au lieu de modifier le package Unity directement (ce qui aurait cassé à chaque mise à jour), on a écrit un fin shader custom "WaterShoreline" qui remplace juste la partie du pipeline responsable du rivage. Tout le reste (réflexions, flow maps, caustics) vient directement de Boat Attack. On ne remplace que ce dont on a besoin.
Les deux gros changements :
Le cutoff brutal de mousse à 2 mètres a disparu. La bande de mousse par défaut de Boat Attack a un cutoff de profondeur fixe, ce qui te donne cet "anneau blanc" uniforme autour de chaque rivage. On l'a remplacé par un falloff plus doux plus un champ de bruit défilant, pour que la mousse s'estompe progressivement et se brise en langues et doigts organiques au lieu d'un ruban parfait.
Alpha de rivage doux. Ce problème de ligne d'eau polygonale contre le terrain ? On fait passer l'eau elle-même en transparent sur le dernier demi-mètre de profondeur. La ligne d'eau disparaît complètement. Le terrain devient simplement plus sombre en s'enfonçant sous l'eau, comme le fait un vrai rivage mouillé.
Notre système de rivières
Le truc avec l'eau de Boat Attack : tel quel, ça gère les océans magnifiquement, mais ça ne sait pas vraiment ce qu'est une rivière. L'eau peut onduler sur place, mais elle ne peut pas couler en aval et autour d'un méandre comme une vraie rivière. C'est un problème quand la moitié de ton monde dark fantasy est censée être marécageuse, fluviale et trempée.
Alors, on a construit un système de rivières par-dessus.
Une rivière dans Mortumus est créée comme un chemin d'écoulement : une simple polyligne de points qui trace la colonne vertébrale de la rivière de la source à l'embouchure. Les designers posent les points où ils veulent que l'eau coule, et le shader fait le reste : pour chaque pixel de surface d'eau, il détermine quel segment du chemin d'écoulement est le plus proche et utilise la direction de ce segment comme courant local. Résultat : l'eau près d'une section droite coule droit, l'eau à l'intérieur d'un virage suit le virage, et tout fait une transition douce entre les deux.
Les textures, normales et la mousse défilent toutes dans cette direction d'écoulement au lieu de dériver sans but. Tu peux vraiment voir dans quelle direction va la rivière.
Tout ça est ajustable en live depuis ShoreFoamTuner, un petit composant inspecteur qu'on pose sur n'importe quelle scène avec de l'eau. Des sliders pour la douceur de la mousse, l'échelle du bruit, l'intensité du bruit, la vitesse de dérive, le falloff alpha. Change l'ambiance d'un lac entier sans toucher un matériau.
Communauté et trash talk : Chat & Social
Un MMO oldschool, c'est autant une affaire de gens que de jeu. Si les outils sociaux sont mauvais, le monde semble vide.
Overhead Chat System
Du texte ancré juste au-dessus de la tête d'un personnage, qui le suit quand il bouge, qui s'efface avec la distance : c'est un classique absolu du genre, et quelque chose qu'on défendra jusqu'au bout.
Ça transforme les groupes en vraies conversations. Ça te permet de trash-talker quelqu'un en plein combat. Ça permet aux derniers mots d'un joueur mourant d'être quelque chose de bête et drôle plutôt qu'une ligne de log système. Le Overhead Chat System gère le pooling, le culling par distance et le suivi d'ancrage pour que ça tienne même quand vingt joueurs se crient tous dessus dans un donjon exigu.
Avoir le look
Sois honnête : tu vas passer une quantité embarrassante de temps sur l'écran de personnage. On le fait tous. C'est le plus beau miroir du jeu.
Le système de prévisualisation du personnage
Notre paper doll n'est pas un rendu 2D figé, c'est une scène 3D en direct rendue dans une render texture UI. Éclairage complet, géométrie réelle, chaque pièce d'équipement sur toi en temps réel. Fais-le tourner, zoome, contemple-le. C'est le genre de feature qui ne change absolument pas le gameplay, et qui change absolument la sensation de posséder le jeu.
Remplir les sacs : Icon Studio
Voici un petit secret inavouable du développement MMO : les icônes. Tu en as besoin de centaines. Chaque épée, chaque potion, chaque bout de loot poubelle que tu trouves dans un coffre a besoin de son propre petit carré 64x64 qui se lit bien dans un inventaire encombré. Et ils doivent tous avoir l'air d'appartenir au même jeu.
Tu ne peux pas juste faire un screenshot d'un modèle 3D et passer à autre chose. L'éclairage doit être cohérent. L'angle de caméra doit être cohérent. Et (c'est la partie que tout le monde sous-estime) le cadrage doit correspondre à la taille de grille que l'objet occupera dans l'inventaire. Une dague 1x1 et une grande épée 2x3 ont besoin de compositions radicalement différentes, sinon les deux ont l'air faux.
Notre solution : Icon Studio
Icon Studio est une fenêtre d'éditeur Unity custom qu'on a construite pour qu'une seule personne (généralement moi, en marmonnant) puisse produire une centaine d'icônes cohérentes sans perdre la raison.
Le workflow : dépose une liste de prefabs d'items. Dis à l'outil quelle taille de grille chacun occupe dans l'inventaire : 1x1, 2x2, 2x3, 1x4, peu importe. Cadre la caméra une fois. Sauvegarde le cadrage comme preset. Appuie sur Générer.
La magie, c'est que la taille de grille n'est pas cosmétique : elle pilote le rendu réel. Un item 2x3 est rendu en 2x largeur et 3x hauteur (d'une base 512px), donc quand il est dans ton inventaire, les proportions sont correctes, pas étirées. Une épée longue remplit véritablement un slot 1x4 en diagonale. Une fiole de potion tient véritablement dans un 1x1. L'inventaire donne l'impression d'organiser de vrais objets.
Par-dessus ça, l'outil gère : des fonds transparents ou personnalisés par item, la capture de bone pose pour que les items à squelette puissent sauvegarder leur pose d'affichage sans perturber le rig gameplay, et des presets pour des catégories entières d'items : toutes les haches se rendent avec la même caméra, toutes les potions avec une autre. Cohérence gratuite.
Le résultat final, c'est que chaque icône du jeu (celles qui se lisent bien à 32 pixels dans une grille d'inventaire dense) a été rendue à partir du vrai modèle in-game, dans la vraie forme que l'item prend dans ton sac. Pas d'art 2D sous-traité. Pas d'éclairage incohérent. Pas de dague qui a l'air plus grande qu'une grande épée dans l'UI.
C'est le genre d'outil que personne ne voit. C'est aussi la raison pour laquelle l'inventaire ne ressemble pas à un sac de stock art dépareillé.
À la prochaine
Aucun de ces systèmes n'est un feature phare de Mortumus. Personne n'achètera le jeu parce que les pas sonnent bien ou parce que les squelettes explosent en morceaux physiques. Mais ce sont les os sous le reste : le travail invisible qui fait que les gros trucs se sentent justes quand ils se posent par-dessus.
Avec ces fondations en place, Fin et moi pouvons construire le vrai monde sombre, brutal et full loot qu'on griffonne dans des carnets depuis deux ans, à un rythme qui ne nous donne pas envie de jeter nos ordinateurs dans une rivière.
— AL