Paperdoll

Paperdoll ou cabine d’essayage, comme on veut.

Le code est déjà écrit, je peux équiper des objets et ils s’affichent sur le paperdoll, c’est déjà pas mal.
Demain je gère le déséquipement, je vais à l’essentiel, pas de drag&drop, juste un clic droit pour replacer un objet dans l’inventaire, de même qu’un clic droit sur l’objet dans l’inventaire pour l’équiper. Je pourrais programmer le drag&drop mais, finalement, je ne gagnerais rien ; peut-être pour intervertir deux bijous bijougs bijoux ou deux armes à une main ? Bof, pas indispensable.

Je m’étais donné deux semaines, c’était vraiment large, quand j’aurai géré le déséquipement – qui est déjà codé, me reste à intercepter le clic-droit dans le paperdoll – je devrai gérer les effect octroyés par les objets. Ca aussi c’est déjà dans le code mais la mise en forme et l’intégration au calcul de combat sera plus lourd. Peu importe, ça avance bien.

Drop de sacs de loot

C’est allé plus vite que prévu, j’ai repris intégralement le système de sacs de loot d’Althea – vides en attendant le générateur d’objets -, c’est old school mais c’est un hommage. Peu de choses peuvent être transposées telles qu’elles étaient dans Neverwinter Nigths en 2002, pour des raisons de copyright, bien sûr, mais aussi parce que “ça ne se fait plus comme ça”. Aujourd’hui, le joueur marche sur le loot, au pire il doit presser ‘E’ et la fenêtre d’inventaire apparaît pour qu’il puisse choisir ce qu’il prend. C’est bien, c’est moderne, c’est direct mais, en un mot comme en cents, qui dépose une boîte de muns et un 9mm full auto au milieu d’une pièce délabrée ? D’accord, la réponse correcte à mon objection est “OSEF !” Oui, c’est entendu, on s’en fout, mais tout de même, WoW avait placé la barre très haut en permettant de stocker un mammouth dans son inventaire qui n’attend qu’une touche pour reprendre forme (le mammouth à mémoire de forme, tout de même, je ne sais pas si même moi je l’aurais tenté) mais… marcher sur le loot ? Je ne sais pas, ça me gêne.

Quoi qu’il en soit, quand un mob meurt, il tombe au sol, jusque là, normal, et quelques secondes plus tard il se dissout dans le néant. Ok, j’accepte le “et ça, tu trouves que c’est réaliste ? Non mais !” toutefois je ferai observer aux narquois que lorsqu’il disparaît, soulageant au passage le serveur de précieuses ressources, un sac de loot peut apparaître au même endroit. Très fier, je montrais à mon fils la mécanique de dissolution de textures, dont il n’avait cure, la seule chose qui l’a intéressé, c’est le sac de loot à la place du mob. Là, il m’a poussé la main et d’un “tu permets ?” laconique a glissé le pointeur de la souris sur le sac pour voir ce qu’il y avait dedans ! me prouvant au passage que le joueur n’en a rien à secouer des mécaniques : il veut le loot et le reste il s’en cogne ! Réflexe pavlovien que les éditeurs de jeux peu scrupuleux exploitent jusqu’au trognon : du loot, des niveaux, des skins et par ici la carte bleue !

Les jeux, de nos jours, ne sont plus inspirés par des rôlistes impatients de partager des aventures avec les joueurs, non, ils sont dictés par des psychologues anglo-saxons, donc vénaux, qui troquent quelques doses de dopamine contre des paquets de biffetons !

Soit, il me revient que j’ai oublié de placer le rais de lumière sous le sac, oubli qui sera comblé sans délai. Après ça, je passe à la cabine d’essayage, mieux connue sous le nom de paperdoll. Je me donne deux semaines, j’aime autant compter large, d’autant qu’après, je commence à chercher quoi programmer ! La minimap et la carte du monde ? Pas encore, il faut un monde pour ça, donc : ça avance !

Je suis à fond, là…

La mécanique de la barre et du livre de sorts est terminée à mon entière satisfaction, c’est un chapitre définitivement clos. J’ai ajouté des informations encyclopédiques aux compétences : qui les donne, à quel endroit, dans quelles circonstances, etc. et je pensais utiliser les fonction d’hypertexte d’Unreal pour que le joueur puisse cliquer, par exemple, sur le nom d’un maître de classe qui enseigne une compétence pour savoir où le trouver directement depuis le livre de sorts mais je vais m’en passer au moins dans un premier temps. Le mieux est l’ennemi du bien. Je reprendrai bien entendu le concept de la mémoire du monde et c’est, me semble-t-il le meilleur endroit pour obtenir n’importe quel type d’informations : je placerai un certain nombre de PNJs spécialisés dans un type d’informations et il suffira de leur parler pour apprendre tout ce que l’on veut savoir.

Alors, à fond, pourquoi je dis que je suis à fond ?
Et bien, le développement de la partie mécanique du jeu touche à sa fin. J’ai encore quelques chapitres à écrire mais j’ai terminé le gros oeuvre. Le souci c’est qu’au fil du temps le code s’est accumulé, chaque système repose sur un nombre important de briques éparses. C’est le caractère fracturé du code, inévitable dans un environnement multi-joueurs et asynchrone, qui me pèse de plus en plus lourd. Toute cette architecture déjà implémentée est lourde et je ne peux pas en porter davantage, il faut que cela finisse, et vite !

Pour le moment, je travaille sur le système de loot, j’implémente une solution élégante qui sera bien plus fine que sur Althea, c’est un chapitre que j’aimerais clore pour la fin de la semaine prochaine, après quoi j’attaquerai le paperdoll pour équiper le personnage des objets du monde et je devrais avoir fini avec la grosse mécanique.

Ensuite, il y aura tout le reste, la création des objets, des sons, des animations, des effets visuels, des objets, des icônes, des musiques mais ça, ce n’est que du travail, la charge mentale est nulle, c’est juste une question de temps.

En attendant, je continue d’encaisser, haut les cœurs !

Presque fini le livre de sorts

Reste à programmer le drag&drop et résoudre quelques bugs.

Le plus important à noter, vu que le sujet de mon post est démesurément inintéressant, c’est que je ne travaille plus qu’en C++ et limite les blueprints à l’interface utilisateur. J’aurais dû faire ça depuis le début, notamment pour le système d’inventaires, mais, pour le dire franchement, je n’osais pas, j’avais peur d’être bloqué, de ne pas maîtriser le sujet en somme.

En fait, Unreal est fait pour être strictement programmé en C++, la programmation en blueprints est possible alors qu’elle ne devrait pas l’être : derrière chaque noeud blueprint devrait figurer un noeud d’appel au C++, c’est de la folie pour un gros projet comme Althea d’utiliser les blueprints.

D’un autre côté, sans l’IA, laisse tomber, déjà que le C++ est un langage de merde, sa version Epic est encore pire avec des surcharges et des contraintes dans tous les sens, c’est une histoire de dingues, l’informatique est une chose bien trop sérieuse pour la confier aux informaticiens !

J’attaque le livre de sorts

La barre de sorts est terminée. On va chercher les sorts du joueur dans la database pour peupler la barre de sorts et autoriser leur activation. C’était un gros boulot, beaucoup de code asynchrone comme chaque fois qu’un élément graphique doit attendre que la database transmette ses données, mais tout fonctionne, il me reste à réaliser la présentation graphique du livre de sorts, programmer le drag and drop du livre à la barre, implémenter les fonctions de tri – étudiés, non étudiés, par coût, par rareté et que sais-je – et serrer les dernières vis. Ce chantier était plus volumineux que je ne l’imaginais.

Je viens de terminer la soirée sur une intense séance de debugging, que de temps perdu ! parce qu’une de mes compétences utilisait directement une classe C++ au lieu de son instance aux blueprints. Or les tags – la fondation du système GAS – ne sont définis qu’aux blueprints et donc étaient totalement ignorés ce qui fait qu’on pouvait continuer à bourrer comme un malade même en était mort. Bon, bourrer sur place vu qu’on est mort, mais tout de même, c’était cool, je vais peut-être reprendre l’idée pour un sort tiens !