GameInstance

Je me demandais depuis fort longtemps comment accéder à l’objet qu’était le Module sous Neverwinter Nights, soit l’objet le plus bas niveau dont dépendent tous les autres objets du jeu. C’est là que je stockais toutes mes variables globales, accessibles directement par un GetModule depuis n’importe quel script.
C’était pour moi une pièce essentielle du puzzle car comment accéder, par exemple, à des timers de sauvegarde automatique d’informations indépendantes des levels ou stocker les données vitales du joueur quand il change de level ?
J’avais le GameMode, mais il semble qu’il change également avec les levels.

J’ai obtenu une réponse à cette question en regardant par hasard une vidéo d’Underscore expliquant la fonction de tous les objets standards d’Unreal Engine.
J’y ai découvert le GameInstance, défini par la dernière ligne des Maps & Modes des Project Settings, qui est exactement ce qu’était le Module de NWN ; je n’y avais jamais fait attention et je n’en avais jamais entendu parler.

Le GameInstance va me permettre, je l’espère, d’émettre depuis n’importe quel objet des Event Dispatchers qui seront reçus et traités où que chaque joueur se trouve. J’imagine que c’est ainsi que je pourrai implémenter un chat, je verrai bien quand j’y serai.

Ayant décidé de consacrer mes vacances à ma famille, je n’ai plus guère le temps que de regarder une vidéo de temps en temps alors que j’escomptais me consacrer à Althea pendant ces 15 jours. Mon fils quittera bientôt la maison familiale, ce n’est pas alors que je pourrai passer du temps avec lui. Question de choix.

P.S. : la réponse à la question du 24 décembre est : “un PC”. Mon fils a reçu toutes les pièces d’un nouveau PC que nous avons monté ensemble le 25. Il passe à un 6 cœurs 12 threads avec 16 Go de RAM ; maintenant sa machine est limitée par sa carte graphique – qui lui donne encore plus de 60 FPS dans tous les jeux et a donc encore de beaux jours devant elle – et non plus par son vieux processeur i5 à deux cœurs et 8Go RAM.

World composition, suite et fin

J’utilise la tecnologie de World Composition dans Unreal pour construire un monde de grande taille. Le principe est, sur le papier, très simple : un niveau persistant qui ne contient que le ciel et la lumière du soleil renferme une infinité de sous-niveaux. Fort bien.

J’ai ma carte principale et je souhaite ajouter une seconde carte à côté de la première. Rien de plus simple : clic droit sur la carte dans l’écran de world composition et ajouter une carte à droite de la première. Nickel.

Ensuite je veux sculpter mon décor sur les deux cartes simultanément là où elles se rejoignent de manière que la transition de l’une à l’autre soit invisible, comme je l’ai vu faire dans les vidéos que j’ai regardées, dont la dernière par Epic durait 80 minutes, faut se les taper leurs vidéos…
Et là le souci survient, bête, insurmontable, le type de souci qui te donne envie de tout jeter par la fenêtre et d’aller jouer aux boules : je peux sculpter sur une carte, ou sur l’autre, mais pas sur les deux à la fois. Je ne vais quand même pas camoufler la couture avec des arbres et des herbes, si ?

Je mets mon problème sur le compte de mon projet que je viens pourtant d’entièrement reconstruire et je crée un projet vide de chez vide : même problème, je ne peux sculpter que sur une carte à la fois.

Avec patience et beaucoup vaseline, éléphant enculera mouche – proverbe chinois – et une heure plus tard – pauvre mouche ! – j’ai trouvé la source du problème : seules les cartes créées lorsque le niveau racine, le persistent level, est actif et sélectionné seront jointes et permettront la sculpture de plusieurs cartes simultanément. Si je crée une carte alors que le niveau à côté duquel je veux la créer est actif, la nouvelle carte apparaîtra mais n’y sera pas jointe.

Quand tu le sais, tout va pour le mieux dans le meilleur des mondes. Quand tu ne le sais pas, tu te dis qu’il y a quand même des mecs doués pour pourrir la vie des confrères, alors que c’est la base du métier : se demander les conséquences de toute utilisation de chaque élément d’un logiciel.

Soit, pour le reste, j’ai récupéré le projet, je suis toujours contrarié par une chose ou l’autre, dont l’absence de prise en charge des claviers Azerty – du genre il n’y a que les Belges et les Français concernés, tu parles comme c’est urgent pour eux – j’ai rentré un bug report on verra bien.

Zéro, c’est rien

Et trois fois rien, c’est déjà quelque chose, soit.

Je reconstruis un projet de zéro, ce qui me propulse dans les difficultés trop longtemps négligées de la juste taille des cartes en world composition. J’utilise comme guide un livestream d’Epic, avec un gars qui part dans tous les sens mais je retirerai bien quelque chose de ces 80 minutes de stream.

Quand je me serai décidé sur la taille optimale des cartes – une carte totalement vide et grise de taille maximale me fait quand même passer de 120 à 100 images par secondes, ça me stresse – je pourrai procéder au rapatriement un à un des composants de code développés jusqu’ici.

Cela fait, j’aurai un projet tout propre et je pourrai continuer le développement du livre de sorts et ensuite de l’inventaire. Après quoi je pourrai enfin envisager de créer ma première carte et de poser les fondations de la première aventure.

En fait, non, ce n’est pas vrai, je vais encore perdre du temps, je ne pourrai pas m’en empêcher à ajouter les bruits de pas, les traces de pas dans la boue et une myriade de choses excitantes que je devrai de toutes manières aborder un jour ou l’autre.

J’ai glissé, chef…

Je ne sais plus ce que je voulais faire, mais j’ai flingué tout le répertoire de développement, ce qui ne m’a pas tracassé puisque j’envoie un backup sur le NAS tous les soirs.
Oui, sauf que je ne backup que le répertoire “content” qui contient tout mon propre travail, pour le moment du code et quelques objets de test. Le reste, soit tous les modèles, textures, matériaux, animations, fichiers init et tout le bataclan, est passé à la trappe.
Y a plus.
Bon, en principe ce n’est pas grave car tout cela est du contenu téléchargeable et ce qui m’importait le plus était mon code, qui est sauf.

Tant que j’y étais, j’ai détruit toute mon installation d’Unreal Engine, répartie je ne sais trop comment entre deux disques et plusieurs répertoires et en plus j’avais des problèmes d’importation directe par Quixel Bridge, alors autant profiter de ma bourde monumentale pour repartir de zéro. J’ai quand même viré plus de 200.000 fichiers, ils peuvent se vanter d’être modulaires ; moi j’appelle ça “faire caca partout” mais à chacun son vocabulaire.

La bonne nouvelle, c’est que le Bridge fonctionne à présent correctement, je peux importer textures et objets directement de la librairie Megascan dans Unreal. La mauvaise nouvelle, c’est que je dois reconfigurer tous mes raccourcis clavier et recréer une nouvelle world composition, soit refaire mes cartes de zéro, ce que je devais de toutes façons faire tôt ou tard.

Vacances demain, je vais avoir du temps, ça tombe bien !