Locomotion v4

Je ne suis pas satisfait de la gestion multijoueurs du déplacement : c’est le foutoir !

Un personnage qui tourne sur lui-même est vu immobile par les autres, quand ce personnage court et fait tourner la caméra autour de lui tout en continuant de courir, les autres le voient tourner sur lui-même, c’est la foire. J’ai trois fois essayé d’obtenir un comportement parfaitement répliqué et je n’y arrive pas, il a y a toujours un truc qui ne va pas, donc je recommence de zéro, feuille blanche !

Unreal, c’est un moteur de shooter, rien de plus, une vraie plaie sans la moindre flexibilité : les fonctions dont j’ai besoin sont absentes, par contre à chaque écran de programmation mon écran est surchargé de centaines de paramètres dont je n’aurai jamais besoin, ce n’est pas pour rien que ce machin a aussi mauvaise réputation tant auprès des devs qui le trouvent lourd et mal foutu que des joueurs qui trouvent que ça rame à fond. Mais bon, c’est le prix à payer pour reconstruire Althea, débarrassé des contraintes du moteur de NWN. La liberté n’a pas de prix, qu’ils disent, ben moi je trouve que je la paie au prix fort !

Les emmerdes volent en escadrille

Je ne suis pas passé loin de la catastrophe, en travaillant sur la sauvegarde des inventaires qui présentait un comportement suspect, je me suis rendu compte qu’il était impossible de lancer le jeu en multi-joueurs : le serveur happait les joueurs en boucle sur l’écran de login.

Je suis resté bloqué là-dessus très longtemps, trop longtemps, ça m’a fortement usé. Il s’avère que le serveur ne peut faire tourner qu’une seule map – ce dont je n’étais pas averti – et que l’IA m’a fait créer mes écrans de login sur une map, avec game mode et controller spécifiques avant de me transférer sur une deuxième map une fois la sélection du perso achevée.
Or, ça ne marche pas. J’ai tout testé dans tous les sens, deux jours je crois que je suis resté coincé là-dessus, rien ne marchait et l’IA, comme toujours quand elle patauge, me conseillait n’importe quoi. Et je n’avais pas d’autre choix que de suivre, puisque j’étais bloqué !

J’en ai eu assez et j’étais sur le point de me résoudre à transformer le jeu en mono-joueur, ce qui m’éviterait bien des migraines mais me contrarierait quand même fortement, quand j’ai, à force de poser des questions à l’IA, découvert que dans aucun cas de figure le serveur ne pourrait gérer plus qu’une map ! J’ai donc entrepris de transférer tout le jeu sur une seule map avec les écrans de connexion assez grands pour masquer l’arrière-plan.

C’est après avoir remporté cette victoire que je me suis replongé dans le problème insoluble de la fermeture inopinée du client ou du serveur : impossible de provoquer une sauvegarde d’urgence de l’inventaire. Les bugs adorant danser en rond en se donnant la main, chaque fois que je pensais trouver une solution, un autre bug compromettait le projet. Ca aussi, ça a duré des jours et ça aussi aurait pu sonner le glas du projet si, par le plus grand des hasards car je l’ignorais, je n’avais appris que dans Unreal tout existe en double !
Le character local n’est en fait qu’une copie du character du serveur ! Au lieu d’initialiser la variable cruciale qui persistait à m’échapper, je l’ai donc créée par un appel au serveur et répliquée ; maintenant, c’est le serveur qui l’initialise et j’ai les deux mêmes valeurs de cette variable sur le serveur et les clients.

Tout cela était tellement pénible que je n’en ai éprouvé nulle joie quand j’ai obtenu un projet parfaitement fonctionnel. Mais, paraît-il, c’est là que s’arrêtent 90% des projets multijoueurs tellement c’est une prise de tête.

Je vais encore travailler un peu sur les inventaires, notamment en créant les marchands et peut-être soit une banque soit des coffres de maison. C’était une haie particulièrement haute à sauter, mais c’est fait et à mon entière satisfaction : le code est stable.

J’ai mangé mon chapeau

Comme nouvelles du front : transfert du code des inventaires des blueprints vers le C++
Une folie !
J’ai cru que j’en sortirais pas, sans déconner c’était le remake du “le fil bleu sur le bouton vert et le fil rouge sur le bouton jaune”.
Je ne sais pas comment j’en suis sorti, des intuitions, des coups de chance, j’ai même brièvement envisagé de jeter l’éponge, c’est inhumain !

Pourquoi entreprendre un chantier pareil ?
Parce que mon système actuel prêtait le flanc au hackers puisque la manipulation des inventaires était laissée au client, et donc vulnérable.
Maintenant, tous les mouvements d’objets sont autorisés par le serveur.
Qui plus est, plusieurs joueurs peuvent maintenant opérer dans le même coffre, ce qui allait finalement se révéler indispensable pour un coffre de guilde, par exemple.

Ensuite, parce que je n’avais pas tout terminé, il me restait les marchands, le système de sauvegarde (persistance) et quelques bricoles, donc c’était le moment ou jamais.

Ben voilà, c’est fait !

PCG

Je n’ai même plus le temps de poster des news, c’est l’enfer pour traduire le système d’inventaires en C++ !

Juste une rapide pour une nouvelle série de Ben dont j’aurais peut-être besoin sur les PCG.