Tooltips

Sont moches, je dois les revoir, l’avantage c’est que je les gère en C++, j’ai juste à changer le code pour changer l’ancrage.

Après ça, tester si plusieurs coffres au même endroits fonctionnent bien, implémenter les marchands et la banque.

Et ce sera fini pour les inventaires !

En attendant, je monte un perso sur WoW pour accompagner mon fils, ça me fait perdre une semaine de travail mais je ne saurais pas faire autrement. C’est vraiment tout ce que je n’aime pas WoW, le leveling est une véritable corvée, le système d’artisanat est sans conteste ce que j’ai vu de pire, ce qui est bien dommage car j’aimais faire de l’artisanat et je n’ai encore vu aucun intérêt au système de maisons. Enfin, quand y faut, y faut !

Faire et défaire, c’est toujours travailler !

Je pensais avoir abattu le plus gros du boulot avec les inventaires et ne plus avoir qu’à ajouter les marchands, la banque et la garde-robes.

En fait, non, loin s’en fallait.

Je n’avais pas géré le cas où un joueur ouvre un coffre et un deuxième arrive qui l’ouvre aussi. Dans ce cas, si le premier essaie de fermer le coffre, il ne se fermera pas puisqu’il est ouvert par le deuxième joueur. Par contre, l’affichage de l’inventaire du premier joueur doit, lui, disparaître. C’est plus compliqué qu’il n’y paraît, j’ai dû créer une table de joueurs en action avec le coffre, les ajouter et retirer, éviter le spam, n’afficher l’animation du coffre qui s’ouvre que lorsque le premier joueur l’ouvre et l’animation de fermeture que lorsque le dernier joueur le ferme. Et gérer l’éloignement du coffre, ne pas autoriser l’ouverture de trop loin et fermer le coffre si le joueur s’éloigne trop. Des tas de petites choses qui paraissent évidentes quand on joue à notre jeu préféré mais qui sont toutes programmées l’une après l’autre. Un vrai labyrinthe.

Ca m’a complètement pourri la journée, le moindre bruit – un gosse qui pleure, le livreur qui amène les courses, la vie quoi – m’empêchait de raisonner, j’étais au taquet. Mais en fin de soirée tout était fait. Et bien fait, le système est stable, propre, simple et solidement géré par le serveur, je n’ai pour l’instant aucune faille de sécurité à surveiller, tout est fait dans les règles.

Je vais à présent m’attaquer aux popups pour afficher les détails des objets, puis aux vendeurs, puis à la banque. Ca va me prendre un certain temps…

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.