Cinq premiers mois de développement

Cinq premiers mois de développement

26 septembre 2018

J’ai terminé hier soir la publication de la dernière version des hakpaks et l’installation du module sur le serveur. J’espère que le prochain patch de Beamdog introduira NWSync et que les joueurs n’auront plus à charger manuellement le contenu additionnel du jeu (haks et tlk) mais d’après ce que j’ai lu, ce ne sera pas encore le cas.
Ce module, le 093, est le premier depuis 5 mois à prétendre proposer toutes les fonctionnalités opérationnelles.
Ce qui ne veut pas dire qu’il n’y a plus de bugs et que tout est parfait !
Je dois encore tester les habitations, les marchands personnels, mettre au point le paramétrage de difficulté des combats, intégrer la librairie de variété musicale dans les zones et une foule d’autres choses, mais le module, en l’état, est jouable et peut rester ainsi quelques jours le temps que je règle la refonte du site web.

Depuis ce matin, je teste Dreamweaver, que je n’aime pas du tout à première vue, c’est beaucoup moins intuitif que mon bon vieux Namo et promet un apprentissage long et laborieux.
Raison pour laquelle je fouille le web à la recherche d’alternatives WYSIWYG car je suis extrêmement réticent à l’idée d’utiliser un outil de création web orienté HTML/CSS car j’ai bien autre chose à faire.

C’est notre bon TooLs qui m’a recommandé WordPress hier et je suis en train de le configurer pour l’installer sur mon serveur web, il semble une alternative intéressante. J’ai essayé d’autres programmes, comme Macaw, aussitôt désinstallé, ça va certainement se jouer entre Dreamweaver, WordPress et Webflow.

25 septembre 2018

J’ai retiré des haks les tilesets inutilisés pour ne laisser que la tour des mages de Velmar, le winter (aujourd’hui remplacé par un similaire de Bioware) et le CRFM auquel je trouverai de l’usage quand j’aurai réalisé les placeables permettant de masquer les raccords.
Le hak principal est passé de 150 à 110 Mo.
J’ai également créé un blueprint pour chaque modèle d’arme spéciale, et ça en fait un paquet !

J’ai ajouté une quête très sympa à la fin du donjon de Draug Anka, à la place de la forteresse draconique, ce qui clôture définitivement la remise à niveau du module. Me reste à équilibrer les combats, terminer le 2DA des musiques de base et tester tout le bazar encore une fois.

Le prochain patch devrait arriver très bientôt et, c’est confirmé, règle le problème de destruction de bases de données sous Linux.

24 septembre 2018

Après cinq mois de travail quotidien à raison bien souvent de plus de cinq heures par jour, j’ouvre une nouvelle page qui ne sera plus forcément mise à jour en temps réel, nous verrons bien ; écrire les choses me permet souvent de les clarifier dans mon esprit et laisse une trace qui peut me permettre de me souvenir de détails oubliés au fil du temps.

Beamdog a annoncé qu’ils sont très près de publier un nouveau patch, incluant le sync, soit la mise à jour automatique des haks, et des corrections diverses dont celles qu’ils m’ont promises, ce qui me permettrait enfin d’envisager une version simple de la gestion des bases de données.

J’attaque Dreamweaver, la refonte du site est ma prochaine priorité, uniquement si Dreamweaver me donne les outils graphiques de mise en page comme le fait actuellement Namo, sans quoi je ne refondrai rien du tout, j’ai autre chose à faire que pisser du HTML5.

J’ai finalement mis en oeuvre le travail réalisé sur les musiques.
Toute zone a en entrée oen_ass (éventuellement appelé par ExecuteScript par le script d’entrée spécifique de la zone), en sortie en oex_zone_clear et udf_generic en udf, éventuellement appelé aussi par ExecuteScript.
Toute zone doit présenter un placeable nommé “_mzxxxxxxxxxxx” où xxxxxxxxxxx est le code de musiques possibles pour la zone tel que défini à ambientmusic.2da et un objet “_zonenorest” si la zone n’accepte pas le repos. Tag, resref et nom reprennent ces codes, invisibles pour le joueur puisqu’il s’agit de placeables statiques mais directement repérables dans l’éditeur.

23 septembre 2018

Cinq mois de boulot sur le machin, ça commence à compter !
Je termine Cavenain, probablement aujourd’hui, peut-être même Emerald, ce n’est pas impossible, et j’aurai tout terminé !

Je ne sais pas à quoi je vais travailler ensuite…
Remonter un nouveau perso, introduire les nouvelles quêtes jusque Sadara, peaufiner l’équilibre des combats, refaire le site, je ne sais pas trop.
Ce que je sais c’est que Beamdog n’est pas encore prêt à publier le prochain patch, je viens de regarder leur stream du 21 septembre, et donc que nous n’allons pas encore disposer de la mise à jour automatique des fichiers haks.
Il me semble raisonnable d’exclure toute ouverture du serveur au public avant cette mise à jour automatique.
Et tout aussi raisonnable d’être prêts pour le prochain patch, j’y suis presque et vais vraiment commencer à pouvoir respirer !

22 septembre 2018

Malvira à Hautes Falaises parle de violite, qu’il faut aller chercher à Cavenain et d’Ormidel l’errant au cimetière de Karthay. J’ai grandement simplifié tout ça, c’était trop pointilleux, une mauvaise réponse à une conversation et il fallait attendre 3 jours pour retenter sa chance. Lotterie inacceptable aujourd’hui, si le joueur est là c’est pour faire quelque chose, pas pour se faire rembarrer.

21 septembre 2018

TooLs a maîtrisé le tileset elfique et réalisé un fort joli prototype de Selfika, c’est vraiment très original.

En parlant de tilesets, je vais dynamiter celui tout noir et tout pourri du Temple des marais. Je pensais le retexturer mais c’est déjà un retexturage du tileset d’intérieur de chateau, j’ai bien mieux à faire. Me reste à redessiner la forteresse draconique pour pouvoir retirer ce tileset des haks.

J’ai ajouté une page à l’index du site présentant tous les tilesets Bioware disponibles, et je me rends compte qu’il y en a 13 que nous n’avons jamais utilisés, dont 7 qui valent vraiment le coup.

Furiatorus : J’ai redessiné le temple des marais et fait fonctionner la quête.

Je suis en train de reconstituer le puzzle des dernières quêtes, tu vas voir comme c’est simple. Si si !

Karthay, les Mégalithes. Trouver l’entrée des cryptes de Haud en hisie – qui a trouvé ce nom, palsembleu ? Un menhir bloque le passage, 1000 points de vie à bourriner. Dans les cryptes se trouve le cadavre de Jonathan qui laisse tomber un parchemin sale. Un alchimiste peut le rendre lisible, Beniar au Naturalia de la Xhavée, le seul alchimiste elfe du module – faut déjà le savoir ! Réparé Naturalia au passage, on ne savait plus y rentrer, étrange car je l’avais revue il y a quelques mois. Il faut ensuite trouver Ogorni à l’auberge de Karthay, un marin qui connaissait la soeur de Jonathan, Vivian. Après être allé rendre visite à Vivian, elle offrira une goutte de son sang pour retourner au sarcophage de son frère et obtenir la récompense finale. Ouf !

Me reste à déplomber la quête des errants, avec Ormidel au cimetière de Karthay, et trouver comment parvenir à Emerald, et puis j’ai fini !

20 septembre 2018

57 balais aujourd’hui.
Bon, ça, c’est la mauvaise nouvelle.
La bonne nouvelle, c’est que ma femme m’offre une tablette graphique.
C’est un peu pour ça que je voulais tout finir avant aujourd’hui, ce qui ne sera bien sûr pas le cas, mais pas loin. Je vais mettre la tablette en service ne serait-ce que pour ne pas invalider le retour si elle ne fonctionnait pas, mais je vais patienter encore un peu avant de replonger dans la confection de modèles.

J’ai retrouvé l’autel des arcanes.
En fait, c’est la suite de la quête du Miroir, dans la zone du magicien troll.
Impossible à tester puisqu’il faut être deux et que mon fils est à l’aviron pratiquement tout le temps. Sauf aujourd’hui où il m’a dit que l’anniversaire de son Papa c’était plus important. C’est mignon, pourvu que ça dure !

Corrigé un bug de manches invisibles sur les PNJs d’ambiance.

Réparé la casse d’objets qui fonctionne à nouveau. Oui, je sais, mais c’est comme ça.

Corrigé un bug infect dans ope_peuplement où je stockais la quête à proposer sur le partenaire du PNJ chargé d’initier la conversation au lieu du premier PNJ. Maintenant, les joueurs recevront correctement les infos sur toutes les quêtes disponibles. J’espère que c’est la dernière fois que de dois ouvrir le moteur de quêtes, ce n’est pas du code sympa !

Corrigé un bug dans le système de loot qui crée une armure invalide si on porte équipée une armure de quête à tag non standard ou marquée objet de quête, dont la valeur est toujours nulle. Ca sonne compliqué dit comme ça et, en fait, ça l’est. J’enlève les toutes dernières scories qui restent dans les nouveaux systèmes développés depuis que j’ai repris le module, quand tout cela sera réglé je pourrai ne plus me concentrer que sur la création de contenu et l’équilibrage.

Ajouté le planétarium de Krynn à la boutique d’enchanteur, c’était l’endroit idéal où le mettre, surtout après avoir osé un “Beam me up, Scotty!” dans le dialogue du ch’ti bonhomme.

Déplacé le sanctu de Syrthe hors du chemin de tout, ça n’allait pas au marché. Du coup, j’ai ajouté une option – rigolote – à la pierre de destinée pour se téléporter chez l’enchanteur, ce qui fournit un raccourci acceptable vers le marché.

19 septembre 2018

Le hasard, cette source inépuisable d’émerveillement.
Je n’étais pas satisfait de la routine de détection de passage d’un joueur devant un rayon de givre dans la crypte de Bahlator et donc je la ré-écris de manière mathématiquement plus acceptable, sans quoi la manière la plus simple de résoudre l’épreuve était de courir d’un bout à l’autre de la salle en espérant que ça passe.
Une fois le code écrit, je le teste et, comme j’ai peu le temps de jouer mon personnage, je me fais le petit plaisir d’aller au fond du donjon pour ouvrir la récompense finale, que j’ai donc fixée à quelques objets magiques.
Je me débarrasse – trop – facilement des undead, je déclenche le piège du coffre et je l’ouvre.
Et paf ! qu’y a-t-il dedans ? L’armure de Bahlator, +4 force, +4 constit. Qu’est-ce que ça fait là ça ?
Je me rends compte que je ne suis pas passé par la minoterie pour entrer et que le code qui remplit le coffre n’a donc pas pu s’exécuter, je suis donc d’autant plus surpris qu’il y ait quelque chose dans le coffre, et surtout un objet qui porte le nom de la quête.
Comment est-ce possible ?
Je pars à la recherche de cette armure dans les blueprints et je ne trouve rien !
En fait, l’armure était simplement déposée dans l’inventaire des ossements, pour que le premier qui fasse la quête la prenne et si le module n’était pas relancé pendant deux mois, personne d’autre ne pouvait l’obtenir pendant deux mois.
Seulement voilà, à l’époque le serveur plantait toutes les 20 minutes, c’était donc une manière de programmer comme une autre : dépendre des crashs-serveur pour peupler les coffres de récompense !
Bon, j’ai réglé le problème, mais ça m’a bien fait rire.

Détecté un bug vicieux : si on essaye de copier un objet équipé par le joueur dans le cadre des 30% de chances de produire un objet magique que le joueur utilise déjà, le système peut échouer à créer une copie d’un blueprint qui n’existe peut-être plus ! Or, au fil des développements, j’ai détruit des centaines de blueprints. J’inclus un message d’avertissement de manière que le joueur sache qu’il vaut mieux détruire l’objet fautif et j’ai écrit du code qui tente de reconstituer le blueprint originel de ce type d’objet pour quand même créer l’objet magique voulu. C’est testé, c’est bon.

La routine de casse des objets s’enclenche beaucoup trop peu. Mais alors, ça ou rien c’est pareil. Les PJs sont aussi devenus trop puissants, c’était prévu, je m’occuperai de ça quand j’aurai terminé de tout remettre en place, c’est juste de la mise au point.

Quête des derguls, pas rencontré de problème majeur, j’avais déjà modifié l’entrée pour que les aventuriers trouvent les feux grégeois nécessaires à faire péter l’amas de rochers, pour lesquels je vais créer un modèle spécifique dès que possible, c’est une quête majeure du module, elle le mérite.
J’ai également créé les messages d’aide par la pierre de destinée.

Ajouté un nouvel objet en vente partout pour évaluer la valeur d’un objet, ce qui permettra de déduire quelle type de gemme d’enchantement en retirer.

Bon, là, je dois aller vérifier la quête de l’autel des arcanes, mais le souci c’est que je ne suis pas foutu de retrouver où c’est !

18 septembre 2018

PMT terminé. J’ai changé une foule de choses, des petits riens, mais des riens qui ne seraient plus acceptables aujourd’hui. Par exemple, en arrivant devant la cache du donjoneur, si le joueur n’a pas 15 en crochetage, désamorçage et recherche, il reçoit le message “Tu n’as pas le talent” et c’est marre.
Un peu court non ?
Bon, là, j’informe un peu mieux de pourquoi ça ne passe pas.
Je rends les pièges moins mortels aussi, et donne une chance de les éviter si le joueur est en mode recherche, déjà qu’on ne peut pas se reposer dans le donjon et que les soins sont réduits de 90%, je n’étais pas tendre avec les joueurs !
J’ai recréé tout ce qui manquait ou qui était cassé, et adapté ce qui devait l’être ; tout cela m’aura pris près d’une dizaine d’heures de travail, ce qui est évidemment bien trop long pour du vieux contenu et qui explique que je ne reprendrai plus rien de l’ancien contenu, sauf demande expresse, auquel cas il est vraisemblable que je le reconstruirai de zéro, j’irai plus vite !
Enfin, ce donjon reste bien marrant, ça valait le coup, je me remets au test des autres quêtes.
Ce travail aura néanmoins nécessité de travailler sur les haks, donc il faut tout recharger, rien de surprenant.

Corrigé et ajusté le désenchantement, les essences de niveau supérieur ne se créaient pas.

Bahlator… ahh, de vieux souvenirs !
Pourquoi la porte ne s’ouvre-t-elle pas miârdedju !
Ca m’arrangerait de faire deux pas dans le module sans avoir à secouer mon écran, sérieux…
J’ai ajouté un trésor dans les ossements de fin de quête au lieu de requérir des joueurs qu’ils matraquent les ossements pour juste obtenir les XPs de quête. A 10.000 points de vie les os, ça c’est du squelette !

17 septembre

Enormément de travail professionnel aujourd’hui, ce sera le service minimum pour le module.
Je suis en train de reprendre les quarante modèles que j’ai jugé utile de reprendre des derniers haks, notamment les tours de siège qui se construisent petit à petit en fonction de l’avancement d’un siège – je pourrai réutiliser cette mécanique – et les champs de blé et de citrouilles pour l’agriculture à laquelle je trouverai un usage.

Terminé de récupérer les modèles que je voulais. Hélas, certains sont cassés, il leur manque des textures, j’ai réparé ce que j’ai pu, à l’arrache, juste en changeant la référence à un bitmap manquant dans le modèle par le nom d’une texture approchante, sans même passer par une U-V map, du vrai travail de sagouin, mais ça passe.

Un client s’étant décommandé 1 minute précise avant son rendez-vous, j’ai pu programmer un chouette truc pour les leviers de sélection des couleurs : ils disposent à présent d’un inventaire dans lequel on peut placer directement le nombre de pièces d’or correspondant à la couleur que l’on souhaite, conformément aux tableaux de couleurs que j’ai publiés, et en allant jusque 175 au lieu de 63.

Du coup, je retourne au PMT essayer de le terminer.

16 septembre 2018

Donjon de Vienzyvwar, perdu des heures à retrouver un bug causé par un blueprint de créature qui n’existait plus. Ca m’apprendra à ne pas systématiquement tester la validité de tout objet créé ; pour une fois que je n’écris pas les trois lignes en trop “au cas où”, et bien cette fois elles étaient indispensables ; autant hier avait été productif autant j’ai commencé cette journée à perdre du temps bêtement.

Mais ce n’était pas tout ! Je me suis rendu compte en testant le PMT 4 que quelque chose clochait, des statues auraient dû apparaître et elles n’apparaissaient pas. Directement allez voir dans les haks pour me rendre compte que la version de mes propres modèles est différente de ce que j’ai récupéré chez Patrick et Bruno. Je nomme systématiquement mes modèles en anglais pour ne pas avoir d’ennuis de caractères accentués et ils ont été traduits en français, ce qui bien sûr cause des problèmes et, en plus, le fichier placeables.2da récupéré est incorrect et salopé, re-perte de temps et confirmation que je ne pourrai probablement rien récupérer du groupe des 4 derniers modules.

En plus, le grand prix de Singapour était chiant comme un jour de février sous la pluie et Vettel a encore brillamment démontré son petit niveau sur la piste. La saison prochaine va être intéressante, pour autant que Leclerc reçoive le même matériel que lui. Je n’ai rien contre Vettel, mais par contre Hamilton incarne beaucoup de choses que je déteste et ça me fait enrager de lui voir servir le titre sur un plateau d’argent.

Allez zou, replonger dans les haks, tu crois que je commence à connaître comment ça marche ?

15 septembre 2018

Les forgerons apposent à présent leur marque sur leurs objets. Bon, c’est du basique, juste “forgé par” à la place du nom de l’objet, mais c’est une petite touche sympa je trouve. Je ne le fais pas pour l’alchimie et l’assemblage parce que le nom de l’objet est trop important. “Potion concoctée par M45t4kilLl4” est certes cocasse mais moins informatif que “Potion de force, toi boire, toi fort”. En plus, c’est moins simple que pour la forge, on verra dans le futur, je ne le note même pas.

Le loot des monstres apparaît à présent dans un sac nimbé d’un faisceau de lumière. Ouvrir le sac enlève la lumière, marquant ainsi que l’on a déjà examiné le contenu du sac et qu’il n’y a plus lieu d’y revenir. J’aimerais créer un effet visuel un peu plus sexy, genre une tête de mort flottante, et le ferai quand j’aurai le temps.
De plus, le sac apparaît à la mort du monstre, il ne faut plus attendre que le mob se décompose pour voir s’il lâche quelque chose ou pas.

Réduit la durée et la fréquence d’application du sort Peur sur les joueurs. Ca commençait à m’agacer de courir partout pendant 20 secondes à répétition.

Ajouté l’affichage des séparateurs de milliers (le point en français) à l’affichage des nombres.

Corrigé un bug qui empêchait d’obtenir des gemmes d’enchantement de qualité supérieure à 1.

Vérifié le manoir Khar Dula, ajouté les aides, corrigé les énormes coquilles, repositionné ce qui devait l’être, refait le livre de quête, mis le loot final à jour ; bon pour le service.

Dès qu’un mineur a obtenu une gemme myrdienne dans une mine, il gagne le droit d’y revenir par le menu de son pic de mineur. Et donc sans courir une demi-heure à travers toutes les zones. Ce ‘recall’ déguisé sera une incitation supplémentaire à monter mining puisque le mineur obtient de facto une capacité de déplacement à travers le monde inégalée.

Correction d’un bug à la teinture, tenter de colorer un emplacement d’équipement vide générait une dague gratuite dans l’inventaire. Je ne comptais pas chercher la solution de cette bizarrerie aujourd’hui, mais comme Wildfar me l’a fait remarquer, je l’ai réglé quand même :p

Donjon de Vienzyvwar :
Porte d’entrée ne mène nulle part: réparé.
Les mobs ne repop pas: réparé. Faire gaffe à ne pas inclure dans l’ASSP des mobs dépourvus de nw_default7 car le spawn ne se mettra pas à jour !
Je passe au deuxième étage.

14 septembre 2018

Commençons par le travail productif.

1° Les PNJs d’ambiance équipés d’armure, et non de robes, ont tous le même code de couleurs, généré toutes les dix minutes par le module ce qui permet d’avoir en même temps du changement et de l’uniformité.

2° Le talent de recherche n’est plus nécessaire pour détecter les passages secrets, il suffit de se mettre en mode de recherche. Le contenu doit être accessible à toutes les classes, ce n’est pas le moment de le restreindre à des classes spécifiques. Pourquoi pas aux multiclassés moines-sorciers, tant qu’on y est !

3° Roi des ogres et roi des glaces ont été intégrés au système de conversations pour inviter à partir à leur recherche.

4° Diminué la probabilité qu’une potion de soins ne fonctionne pas.

5° Réglé l’Ombre et la Lumière, qui ne fonctionnait plus et adapté la difficulté, j’aurais été incapable de refaire cette quête sans aller voir la solution dans l’éditeur, les joueurs de l’époque d’Althea étaient vraiment très doués ! J’ai ajouté des indices à la pierre de destinée, profitant du nouveau système qui permet d’en obtenir où que l’on se trouve moyennant points d’exploration. Je ne pourrai évidemment déployer totalement le système qu’en montant un deuxième perso puisque je devrai me poser la question de l’opportunité de ce système pour chaque zone.
J’ai également ajouté une fonction sur la pierre de destinée qui permet, toujours moyennant points d’exploration, de passer une étape de quête pour laquelle on n’a pas les qualifications. Dans l’ombre et la lumière, il fallait faire les poches aux gardiens squelettes pour progresser. N’ayant pas le talent, je pouvais aller me faire voir. Ce n’est évidemment plus acceptable aujourd’hui, donc en payant 400 points la clef apparaît dans mon sac.
Où que le joueur se trouve, si un check impossible est nécessaire, la pierre de destinée fera le boulot.

Maintenant les sujets qui fâchent.
Le gars qui a fait le très travaillé set médiéval a laissé traîner un placeables.2da dans son hak, sans aucune raison apparente, ce qui m’empêchait de placer mon propre placeables.2da dans mon dossier override. Encore du temps perdu à chercher d’où venait le problème et du temps perdu à refaire tous les haks et les republier sur le site.
A peine ai-je résolu ce problème que j’aperçois – ou plutôt que je n’aperçois pas – la porte intérieure du temple de Selene qui a mis les voiles, ce qui est sans doute normal vu que c’était un bout de tissu, mais ça commence à me gonfler sérieux, je suis tout doucement en train de me demander si je ne serais pas allé plus vite en repartant de zéro, je me traîne un passif qui ressemble tout doucement à un boulet !
Du coup, je suis obligé de fouiller dans les haks pour comparer les 2DA de Bioware, ceux d’Althea et ceux des nouveaux tilesets.
J’ai une autre solution tiens : carrément virer le tileset médiéval, je ne l’aime de toutes façons pas, il n’est pas dans le ton des tilesets originaux ce qui ringardise le jeu et il est texturé beaucoup trop sombre, l’ambiance générale de la ville est gris-verdâtre avec en plus une devanture de boulangerie typiquement allemande, ou polonaise, j’en sais rien, mais je vais sérieusement considérer de dégager ce hak.

13 septembre 2018

Pour laisser l’opportunité à d’anciens joueurs de se connecter au serveur sur un module stable, j’avais laissé tourner le 079 sur le port 5121 et je testais les modules de développement sur le port 5122. J’aurais dû me rendre compte plus tôt que cela allait provoquer des conflits de bases de données, puisqu’un objet existe dans chacun des deux modules contenant les données de la même DB, les enregistrements de l’un ne pouvant qu’écraser ceux de l’autre. Erreur de débutant mais c’est la première fois que je tombe sur le problème, je dois le garder bien à l’esprit si je venais à scinder le module en plusieurs sous-modules : il ne peut exister de référence à une même DB sur deux modules différents hormis en lecture seule !

Désolé pour les anciens, mais je dois fermer le module 079 et ne plus faire tourner que la version de développement, ce qui implique la nécessité de charger les hakpaks que je serai amené à modifier au cours du développement. J’avais prévenu, je suis en mode autiste jusqu’à l’ouverture, j’ai essayé de concilier la chèvre et le chou mais c’était vraiment trop de travail pour moi de gérer les haks. Le prochain patch de NWN – quoi que je sois un peu inquiet de ne plus avoir de nouvelles de Beamdog depuis deux semaines – apportera cette amélioration merveilleuse de télécharger automatiquement les haks nécessaires.

J’ai ajouté des fichiers optionnels à placer dans le dossier override, ce sont pour le moment les nouveaux modèles d’épées et de haches, qui franchement n’apportent pas grand-chose, je les ai virés des haks et ne les utiliserai plus en ce qui me concerne.

La variété des apparences des objets créés par le système de loot est à présent proportionnelle au niveau du joueur. En clair, un débutant aura plus souvent l’apparence de base d’un objet et n’aura jamais les apparences les plus élevées. Ceci dans l’esprit d’épicer la montée en niveau.

Désenchanter un objet ne le détruit plus, mais efface simplement ses propriétés magiques, ce qui permet de directement utiliser dessus la gemme d’enchantement obtenue pour tenter d’obtenir un meilleur objet. Comme l’objet sera détruit une fois sur 3 pour instabilité, c’est pour le moment une option acceptable, les objets du drop aléatoire étant quand même bien pourris ! Je me donne un peu de temps pour déterminer si je buff le loot ou pas, il me suffira de modifier un 2DA, preuve que le nouveau système est une Rolls comparé à l’ancien, complètement figé.

J’ai publié deux cartes de couleurs pour éviter de – trop – perdre son temps à reluker le mannequin de l’enchanteur pour choisir ses codes de couleur.

12 septembre 2018

Plusieurs quêtes n’ont jamais été testées, j’essaie de retrouver les entrées et j’y vais. Je me rends aussi compte que le module n’est pas assez bourrin. Il manque des donjons de base avec paquets de mobs et trésor à la fin. Je vais en ajouter.

Les fragments d’essence myrdienne tombent à présent – rarement – dans les trésors de cartes.

Un nouvel objet, le bac à teinture, est en vente auprès des marchands et est inclus dans la liste des objets de loot. Il permet d’appliquer à son armure/casque le schéma de couleurs sélectionnées chez l’enchanteur.

La pêche est remise dans le jeu au gué de Syrthe, une note de carte l’indique. Un peu statique comme système, mais il y a plus urgent.

Corrections et mises au point diverses.

11 septembre 2018

17 ans. Je me souviens ; quand Sophie, une collègue, m’avait dit, éberluée, qu’un avion s’était écrasé sur le World Trade Center, que je connaissais pour y être allé, je n’avais rien compris de ce qu’elle me disait. Le fait qu’elle fût flamande n’y était pour rien : je ne pouvais juste pas comprendre pareille énormité, j’ai marmonné une banalité et suis retourné à mon bureau ; j’étais chef de projet à l’époque, la dernière étape de ma carrière d’informaticien.
En rentrant le soir en voiture, dans les interminables embouteillages du ring de Bruxelles, la radio débitait en boucle les mêmes informations, mais c’est seulement en arrivant chez moi à Liège, quand j’ai vu les images de la catastrophe, répétées sur toutes les chaînes, que j’ai commencé à comprendre.
J’avais beaucoup d’amis américains à l’époque, ils étaient anéantis. C’était la première fois, il est vrai, que la guerre, qu’ils ne rechignaient pas à conduire partout où ils le jugeaient bon, se déchaînait sur leur propre territoire. Cela ne les a, hélas, pas raisonnés, Bush allait se charger de démontrer pour quelles raisons tant d’inconnus haïssent les États-Unis. Et me fournir le sujet de mon premier roman – épuisé et mon éditeur a fait faillite, pas la peine de chercher un exemplaire !

Soit.
J’aurai terminé aujourd’hui la mise au point de tout ce que j’avais prévu de programmer.
J’en suis déjà à la version 086 du module alors que le serveur fait toujours tourner la 079, mais je ne suis pas certain de publier un nouveau module avant d’avoir bien avancé dans mes tests avec Marcel.
Ce qui est certain, c’est que le développement de l’histoire qui va conduire les joueurs jusque Sadara va reprendre bientôt.
Comme je l’ai indiqué, je ne compte publier une nouvelle version que quand je me sentirai en position suffisamment confortable. Programmer et debugger en même temps c’est trop lourd et je dois encore mettre un gros coup pour maîtriser Dreamweaver et publier un nouveau site, ce que nous avons pour le moment a le mérite d’aller à l’essentiel, mais la présentation est quand même bien pourrie !

10 septembre 2018

Trouvé un bug qui dormait depuis quinze ans dans le code, il était possible de fabriquer n’importe quel objet demandant deux composants différents en ne fournissant que le premier. Je me demande comment ce genre de bêtise n’a pas été détecté à l’époque, mais soit, c’est la nature des bugs, une simple erreur dans le nom d’une variable et c’est la porte ouverte à n’importe quoi, je me demande combien l’auront exploité !

En débuggant l’assemblage, je me rends compte – il était presque temps ! – à quel point le debugging peut être fastidieux sur NWN. Pour trouver le bug que je cherche à l’instant – les robes en soie ne se fabriquent pas – je pars d’un script de conversation, at_art_soierobe, qui appelle la librairie inc_art_assemble propre à l’assemblage, qui appelle la librairie inc_artisanat qui regroupe les fonctions communes à tous les artisanats. NWN n’a – évidemment pas – de debugger puisqu’il n’a jamais été prévu pour créer des scripts de plus de cinquante lignes, je suis donc contraint de semer du code qui teste les variables de plus en plus près de la source du bug en devant chaque fois recompiler l’ensemble des librairies et scripts impliqués.
Ca prend un temps con.
C’est surtout pour ça que je passe des journées à mettre le module au point alors qu’il ne me faut généralement que quelques heures pour écrire un système de jeu.
Ici, par exemple, j’avais une condition qui attendait la chaîne de caractères “MSL” alors que l’objet était défini comme “MLS”. Deux caractères inversés, une heure de perdue.

Soit, j’ai terminé l’adaptation de l’assemblage, je travaille à un nouveau système de jeu qui permet de définir son ensemble de couleurs préféré. Équiper une armure ou un casque lui applique automatiquement les couleurs de tissu, cuir et métal choisies par le joueur auprès de l’enchanteur de Syrthe.
Six leviers font leur apparition, deux pour les couleurs du tissu, deux pour le cuir et deux pour le métal. Le mannequin reflète en temps réel les couleurs choisies. Une chaîne à tirer enregistre le schéma des six couleurs de manière permanente. Chaque fois que le joueur ira tirer la chaîne – on peut imaginer dans le futur des gemmes transportables qui font la même chose – son style de couleurs sera appliqué à son équipement.

Toujours chez l’enchanteur, deux nouvelles machines:
1° L’extracteur d’essences : tout objet magique d’une valeur supérieure à 20.000 pièces d’or est transformé en gemme d’enchantement. Il en existe de 5 types, de plus en plus puissantes.
2° Le manipulateur d’essences : placer une gemme d’enchantement et un objet dans la machine ajoute si possible un enchantement à l’objet, ou recharge un sceptre ou une baguette.

Enfin, et ça fait beaucoup de choses pour une journée de travail, j’ai créé un tablier d’artisan que l’on trouve dans le coffre de fin du cloaque. Il donne +50 dans les compétences d’artisanat de NWN, ce qui m’évite de reprogrammer les modifications d’armure, ainsi que de menus avantages. Et surtout, il ressemble à un vrai tablier, ras le bol de faire de l’alchimie en full plate !

09 septembre 2018

Show aérien à Kleine Brogel aujourd’hui, je continue à travailler sur la modification de l’assemblage et ça se passe bien, c’est plus simple que prévu.
Je me contente de fixer des propriétés caractéristiques sur les objets qui demandent des compos rares et d’enchanter tout ce qui peut l’être.
C’est finalement plus facile que la forge, j’aurai rapidement terminé.

Finalement, nous sommes allés faire une séance de shooting au dolmen de Wéris parce que j’avais acheté les tickets pour le meeting de samedi et que ma tendre épouse a insisté pour que nous y allions dimanche. Le temps de se rendre compte de sa méprise, nous étions samedi soir. Consternation, pas grave, nous irons l’année prochaine.
J’en ai profité pour prendre une journée de congé de Myrda et monter mon moine niveau 119 sur WoW.

08 septembre 2018

Forge terminée, je travaille sur l’assemblage.
Je ne me rendais plus compte qu’on pouvait fabriquer tout ça !
Il y a un peu de travail.
Pour changer.
Mais c’est bientôt fini, je vais pouvoir revenir au testing proprement dit, puis reprendre le développement.

07 septembre 2018

Je vais être franc : j’en ai ras la casquette, je code comme un malade depuis trois semaines. L’artisanat est un écheveau complexe, modifier tout ce bazar pour le rendre compatible avec la nouvelle librairie de création/enchantements d’objets est un casse-tête ; non seulement je dois avoir à l’esprit une multitude de fragments de code – c’est lié à la structure en scripts/conversations éclatés de Bioware – mais en plus au fil des années des particularités ont fait leur apparition, comme les armures en verdanite/violite et les armes de roi.

Le bon côté de la chose, c’est que le nouveau code est grandement simplifié – je puise les informations dans myrdaloot.2DA au lieu de les hard-coder – et que je peux détruire le bazillon de blueprints que j’avais dû créer pour chaque arme/armure/objet de chaque qualité, soit 8 fois… euh… un bon paquet.
L’ennui, c’est que quand je vais devoir tester tout ça, j’ai toutes les chances de ramasser les bugs à la pelle.

Tout ce travail était-il nécessaire ?
Non si nous avions conservé l’approche AD&D pure et dure d’Althea avec une limite au +5, oui si Myrda veut évoluer vers ce qui se fait de plus moderne en matière de jeux en ligne.
La question ne se pose donc pas : je n’avais pas le choix.
Le système d’Althea était bon, mais tout était figé dans les blueprints, apparences et propriétés, impossible de rien créer dynamiquement et dévier de la limite au +5 aurait tout fait s’écrouler comme un château de cartes.
Le nouveau système est plus riche, plus flexible, plus évolutif, plus simple.
Les joueurs pourront obtenir d’une même quête des loots différents, toujours adaptés à leur niveau, ce qui permet de recycler le contenu. La qualité des objets dépend de la difficulté de se les procurer. Les armes de roi permettent des sacrifices pour obtenir des artefacts prodigieux. Les cartes au trésor procurent des objets rarissimes. Les joueurs peuvent désassembler les objets magiques pour en retirer l’essence puis la recombiner pour produire de nouveaux effets. Tous les objets peuvent prendre des apparences et des schémas de couleurs personnalisés. Les artisans peuvent apposer leur marque de fabrique sur leur production. Je suis sûr d’oublier des trucs, nous allons disposer du système de loot le plus performant que j’aie rencontré sur aucun jeu et si de nouvelles idées apparaissent, elles seront faciles à implémenter sans risquer de tout casser.

Donc oui, il fallait passer par là, mais bon sang que j’en ai marre ! Coder c’est fastidieux, surtout dans Neverwinter qui n’a clairement jamais été prévu pour faire ce que des tarés dans mon genre en font ! A la base, c’est un créateur d’aventures façon campagne officielle, rien de plus, rien de moins. Dévoyer ce moteur pour en faire le support d’un univers persistant avec systèmes de jeu et créations 3D sur mesure, c’est un peu optimiste !
Quand je pense que quand j’aurai fini tout ça je vais probablement tout recommencer à zéro sous Unreal Engine… mais là, on verra, les inconnues sont nombreuses.

06 septembre 2018

“Pour  voir”, j’ai créé une copie de ce brave Marcel, que j’ai passé en hostile, et nous nous sommes gentiment frités. Je n’ai pas gagné à tous les coups, le combat était donc équilibré et se résumait pratiquement à qui assommerait l’autre le premier.
Je me demande s’il ne serait pas judicieux, pour obtenir des combats intéressants, de partir d’un principe équivalent : copier un personnage joueur pour le transformer en monstre de même niveau et modifier son arme et son apparence.
Partant de là, je peux baisser la puissance du monstre en lui donnant une arme moins bonne, en diminuant le nombre de ses sorts, son armure et ses caractéristiques, comme je peux le rendre plus puissant par la même méthode.
Je vais réfléchir à ça dans les jours qui viennent, c’est peu de travail et très efficace, je pense à cela depuis longtemps, je crois que le temps est venu d’implémenter cette librairie de fonctions de génération de monstres, elle rendra l’univers plus vivant et les défis plus intéressants.
De toutes façons, il m’est impossible d’attaquer les instances de raid sans ce type de librairie.

Aujourd’hui je travaille sur le produit de l’artisanat pour le mettre en ligne avec ce qu’on loot en donjon et sur les mobs. C’était une des raisons principales de la refonte complète du système de loot/enchantement : puisque nous allons maintenant jusqu’à l’équipement +20 au lieu du +5 d’Althea, tout devait être revu de fond en comble.

05 septembre 2018

Il apparaît de plus en plus nécessaire de créer mon propre système de challenge rating. Celui de Bioware est excellent mais ne convient pas pour Myrda en raison de la puissance exceptionnelle des joueurs.

The challenge rating of a creature is calculated using many sources, most notably hit dice (HD). The additive CR is calculated by multiplying a sum by the racial challenge rating modifier, obtained from the “CRModifier” column of the row for the creature’s race in racialtypes.2da. The sum in question is of the following:

  • HD * 0.15
  • (natural armor class modifier) * 0.1
  • [(total value of inventory items, excluding creature slots) / (HD * 20,000 + 100,000) ] * 0.2 * HD
  • [ (hit points before constitution and feat bonuses) / (average hit points) ] * 0.2 * HD * (creature walk rate) / (player character walk rate)
  • [ (total of ability scores before racial and other modifiers) / (HD + 50) ] * 0.1 * HD
  • [ (total of innate levels of special abilities) / (HD + 6) ] * 0.15
  • [ (total of innate levels of usable spells) / (HD + 1) ] * 0.15
  • [ (innate save modifiers) / (base saves) + 1 ] * 0.15 * HD
  • [ (total of CR values of possessed feats) / (HD * 0.5 + 7) ] * 0.1 * HD

Ceci laisse clairement apparaître que jamais je ne pourrai avoir de combat équilibré entre une créature de CR 20 et un joueur de niveau 20. A l’heure actuelle, un joueur de niveau 20 va écrabouiller une bestiole 20. Par exemple, Sombrevoile avait un challenge rating de 249 avec son mage 20/prêtre 20 et Marcel au niveau 19 lui oppose une résistance farouche, il en viendrait à bout si elle n’invoquait pas de balors à tour de bras.
Cela n’a aucun sens.
Dès que j’aurai terminé toute la refonte des objets magiques, ce qui pourrait fort bien être accompli cette semaine, je pense me pencher en urgence sur ce problème, car il est apparu clairement que je ne peux pas donner de loot approprié sans connaître la réelle difficulté du combat.
Ce qui va se produire si je ne change rien, c’est que les joueurs connaîtront très vite les zones remplies des mobs les plus puissants qui ne représentent pas de danger pour eux et vont s’y rassembler pour ramener des brouettes d’objets magiques.
Ce qui, en soi, est fun, mais irréaliste.
Cette question m’empoisonnait déjà la vie à l’époque d’Althea, je vais tordre le cou une bonne fois pour toutes à cette difficulté dès que possible.
Le loot (et les XPs qui seront enfin liés) tombera sans aucun modificateur artificiel, en fonction de la difficulté réelle du combat.
Les éléments que je vais utiliser se baseront sur la différence entre points de vie, points de caractéristiques, armure, niveaux de sorts, nombre d’attaques, familiers, etc.

Au chapitre de l’intégration du code de génératon de loot, j’ai détruit plusieurs librairies et, entre autres, les objets spéciaux de type Silfenis. Je simplifie énormément le code pour ne plus faire appel qu’à une seule librairie : inc_loot qui gère la création d’objets, leur enchantement, les drops de loot normal et spécial.
Ce n’est pas trop rigolo car je risque à chaque instant de casser quelque chose qui marche, d’où la nécessité de finir de tester tout le module avec Marcel dès que j’ai fini ce travail et puis de recommencer un nouveau perso pour tout re-tester une fois encore.
Le résultat final sera un système de loot plus passionnant et surtout infiniment plus facile à mettre en oeuvre. Je pourrai également me défaire de pratiquement tous les blueprints d’artisanat ce qui va également générer une simplification considérable.
Je ne conserve plus en blueprints, avantageux parce qu’ils sont directement manipulables mais ennuyeux parce qu’ils figent l’univers de jeu, que les objets rares de l’artisanat et du loot que je ne peux automatiser, comme les statues de repos, les charmes et des choses comme ça, par essence figées.

04 septembre 2018

Rentrée des classes.
Nous avons quand même pu terminer le dolmen réalisé sous Blender, Maxime et moi. Nous avons énormément appris de l’exercice, les pierres sont magnifiquement texturées et tout ce qui n’est pas parfait dans l’objet tient de notre inexpérience. C’est que c’est un métier, la conception 3D !

Au programme d’aujourd’hui, l’intégration du nouveau système d’enchantement dans le loot de chasse, le loot de chasse au trésor, l’artisanat et les objets de quête.

03 septembre 2018

Je me suis demandé pendant des années s’il existait une alternative à NWN en matière de world builder. J’avais fait des recherches, sans rien trouver, les rares références comme Big World étaient lourdes et chères.
Je ne sais par quel intuition je suis allé chercher des informations sur l’Unreal Engine 4 et j’ai appris qu’il est gratuit. Que des quantités impressionnantes de bibliothèques existent pour construire son propre univers avec des plugins pour faire tout et n’importe quoi, en ce compris la connexion base de données.
Et puis la réalité m’a rattrapé : NWN permet de créer une ville, une campagne ou un donjon en quelques minutes, ne reste plus qu’à y ajouter ce qui fait la qualité d’un jeu, bien plus que de superbes graphiques auxquels on s’habitue en moins de deux jours : le gameplay.

Nous avons, en famille, acheté la dernière extension de WoW à laquelle nous jouons depuis plus de dix ans. C’est très beau. Mais alors, vraiment très beau.
Cela dit, c’est aussi un foutage de gueule ehonté : il n’y a rien de nouveau à faire depuis des années, les développeurs sont dépourvus de toute créativité autre que graphique et même un jeu de vingt ans d’âge comme Ultima Online présente des possibilités qui n’existeront jamais dans WoW : possibilité de dompter une variété insensée de créatures, dont les dragons, qui évoluent avec leur maîtres au fil de leurs aventures, chasses au trésor, construction modulaire de sa propre maison, décorations de maison réparties dans le monde, bardes capables de charmer, calmer, affaiblir l’ennemi, artisanat utile, vendeurs personnels et j’en passe.
UO est en VGA, et quand nous y retournons, nous n’y prêtons pas attention, les graphismes ne sont que le support de l’aventure, pas sa finalité.

Je ne suis pas loin de penser que plus les jeux modernes sont beaux, plus ils sont creux.

C’est au point que je m’interroge sur l’opportunité d’utiliser les nouveaux tilesets de NWN, absolument magnifiques mais qui dévalorisent tout le reste du contenu graphique du jeu en le ridiculisant et n’apportent finalement qu’un étonnement rapidement évanoui.

Bref, je reste convaincu que l’environnement de NWN, vieux de 15 ans, est parfaitement adapté à la création personnalisée d’univers de jeu par de petites équipes et avant de changer les tilesets ou de penser à créer quelque chose sous Unreal – ce qui je peux parfaitement réaliser – je compte bien terminer tout ce qui est en chantier pour Myrda d’abord.

Pour le moment, l’enchantement. J’en suis au dez – faudra que je trouve un terme plus rp – et je termine par la création de loot sur les mobs et par l’artisanat.

02 septembre 2018

Faut vraiment que je me mette à Dreamweaver, le site est une honte.
Soit, je m’arrange avec la honte, je traite directement comme disait Coluche, je patienterai encore un peu avant de goûter aux joies du HTML5.

Je suis tombé sur un très gros problème dans les routines d’enchantement, je ne m’étais pas rendu compte, par un fâcheux concours de circonstances, qu’il m’était impossible d’enlever les propriétés magiques d’un objet avant d’en placer de nouvelles, car enlever des propriétés ne prend pas effet avant la fin de l’exécution d’un script et donc, chaque fois que je copie l’objet pour en changer l’apparence, je copie un objet toujours pourvu de ses propriétés anciennes. En un mot comme en cent, je l’ai dans l’os.
Je me suis dit que ce n’était pas grave, qu’il me suffisait de créer les blueprints des objets qui n’existent pas dans le jeu de base sans enchantement – comme les capes, elles sont toutes magiques – et c’est ce que j’ai failli faire avant de me rendre compte que cette technique m’empêcherait de partir d’un objet équipé par le joueur – les fameux 30% de chances de looter un objet du même type que celui qu’on utilise – puisque ces objets sont forcément magiques et donc indésenchantables – cool comme néologisme.
Alors que faire ? passée la phase de lamentation suivie de la non moins rituelle bordée d’insultes à l’adresse des développeurs de Bioware – sans qui rien de ceci ne serait possible, qu’ils soient bénis.
Réfléchir et trouver une solution.
Dans un même script je crée l’objet, qui est toujours une copie d’un objet du joueur ou de base dans le jeu, puis je lance un executescript qui va effacer l’objet et lui rendre un nom générique et toujours dans le même script je conclus par un appel à la routine d’enchantement. Et voilà ! Tout s’exécute dans un seul script avec juste une indirection au milieu.

J’ai jeté les bases du désenchantement, mais avant de le terminer je conclus les routines de création d’objets de quête.
J’ai deux solutions, soit je crée le blueprint de l’objet dans le module et lui applique les enchantement propres à la quête, soit j’écris un code générique pour tous les types de quête et je crée un fichier 2DA qui reprend le type de l’objet, son apparence, ses couleurs et les enchantements à lui appliquer.
Dans un premier temps, je pense que je vais passer par l’option blueprint, beaucoup plus simple, mais je garde quelque part en mémoire qu’un système générique d’objets de quête serait vachement cool !

01 septembre 2018

Le serveur Teamspeak ne fonctionnait plus, j’ai cru que c’était par défaut de licence, mais il fallait juste le mettre à jour, ce qui est fait.

J’ai dû créer deux fichiers 2DA supplémentaires pour l’enchantement, un pour les sceptres et baguettes, l’autre pour les potions, car ces fichiers n’existent pas – à ma connaissance – dans le fatras de 2DA de Bioware, où je suis d’ailleurs surpris de n’avoir jamais retrouvé une liste de courses.

J’ai créé chez Dalamar un phylactère où il est possible de recharger sceptres et baguettes moyennant une gemme d’enchantement, ce qui n’engage à rien puisque le processus de désenchantement n’existe pas encore, c’est ce à quoi je travaille pour le moment.

31 août 2018

Système d’enchantement terminé et testé. Nous pouvons à présent créer à la volée n’importe quelle combinaison d’objets dotés de tous les enchantements possibles, ce qui offre des possibilités qui se comptent en… euh… qui ne se comptent pas, y en a trop, des dizaines de milliers.
J’ai réalisé pratiquement tout ce que j’avais en tête, j’ai seulement dû laisser de côté la différenciation des objets selon l’alignement. Je pourrais toujours le faire, mais c’est du travail pour pas grand-chose, j’ai déjà passé presque deux semaines sur le nouveau système. C’est cher en heures de travail, mais ça valait la peine.

J’attaque le système de désenchantement des objets et de la combinaison des résidus obtenus pour produire… je ne sais pas encore trop quoi, j’en suis toujours au stade de l’évaluation des concepts.

Il est à noter que le système repose d’une part sur une librairie de code assez compacte, je suis toujours sous les 500 lignes, mais aussi de 4 fichiers 2DA de taille respectable qui m’offrent la possibilité de modifier une multitude de paramètres sans plus devoir toucher au code.
La flexibilité de ce nouveau système permettra de tout envisager avec la plus grande facilité.

30 août 2018

Nous sommes allés faire une séance de shooting au château de Franchimont ce lundi, j’en ai ramené des dizaines de textures dont je ne fais rien pour l’instant mais qui serviront pour mon projet de re-texturer le LOK dungeon, bien dessiné mais super-moche, c’est ça ou le virer des hacks. Je compte d’ailleurs dès que possible virer tout ce qui n’est pas utilisé ni intéressant, la première victime sera probablement le CRFM combo.

Le travail sur l’enchantement se poursuit.
Lentement.
Je n’arrive pas à décider quelles propriétés affecter à quels objets.
Phase de réflexion en cours, les idées ne se mettent pas en place, ce qui indique clairement que je ne sais pas ce que je fais.
Solution ?
Attendre que la bonne idée vienne toute seule.

29 août 2018

J’ai attaqué l’enchantement des objets. Je vais au fond des choses, je conserve 55 enchantements possibles.
C’est beaucoup de travail mais cette fois, la dernière, tous les cas seront prévus et possibles, exploitant 100% des possibilités du moteur.

28 août 2018

En testant le système dans le détail, je me suis rendu compte que certaines variations d’épées à deux mains disparaissaient dans le warp.
WTF?
Après analyse – tu sais, le truc qui s’écrit en 7 lettres et autant d’heures perdues – il appert qu’un génie chez Bioware a trouvé que ce serait cool, dans la version de base du jeu, donc sans le moindre hakpak, de mettre un piège de ce type :

Marrant les modèles qui sautent du 4 au 7 non ?
Donc chaque fois que mon générateur essaie de faire apparaître une arme d’apparence 5 ou 6, elle file à l’anglaise pour ne jamais reparaître. Les utilisateurs d’épées à deux mains apprécieront, c’est 30% des armes qu’ils pourraient looter qui leur passent sous le nez.
Bon, ben je suis bon pour installer un garde-fou qui gère la situation proprement.
Pas la peine de me dire merci, je suis payé pour ça.
Non, je rigole !

Un petit truc sympa : quand on loot une cape ou un casque, il prend le schéma de couleurs de l’armure que l’on porte, comme ça tout est coordonné. Bien sûr, je pourrais n’en rien faire et imposer au joueur de colorer l’objet par le système de teinture. Je le ferai probablement, mais ainsi le code est déjà écrit.

Les bombes présent un challenge nouveau, elles ne répondent pas aux classifications classiques.
Très logiquement, elle s’intègrent sans peine de le nouveau sytème que je viens de mettre au point, il m’a fallu moins de dix minutes pour les intégrer dans le jeu.

Par contre, le fichier myrdaloot.2DA s’est corrompu d’une manière inhabituelle, le dernier byte de chaque ligne est devenu invisible, il m’a fallu près de deux heures pour le comprendre. Ré-enregistrer le fichier a réglé le problème.

27 août 2018

J’ai terminé les tests du système de création d’objets, je dois à présent m’attaquer à l’enchantement.

Le processus de création d’armures est superbe, les objets obtenus sont tellement beaux que je ne suis pas certain que beaucoup choisissent de les teindre.
Pour la teinture d’objets, je pense utiliser le mannequin de l’enchanteur, sur qui je copierai l’armure du joueur et appliquerai les teintures de la même manière que je montre les boucliers, ne restera plus qu’à faire son choix.
Je devrai faire la même chose avec les casques, et outre la couleur de l’armure, on peut imaginer autoriser d’en changer l’apparence, le système de Bioware ne me plaisant pas vraiment pour le peu que j’en ai vu, à tester davantage peut-être.

26 août 2018

J’ai dû refaire une armure de chaque type, ça n’en fait jamais que 62, pas grave, pour écrire un code qui crée chacune de ces armures pour en extraire les numéros de modèles. A quelque chose malheur est bon, ça m’a donné l’idée – qui n’est pas neuve, autant recycler ce qui marche – de créer des textures pour colorer son équipement. Je mets ça en urgence puisque je suis dans le contexte.
Je peux enfin reprendre les procédures de test de création d’objet.

25 août 2018

Le système de création d’objets est terminé et en phase de test.
Et les tests butent sur un bec : les armures ne sont pas numérotées dans le moteur de jeu comme dans l’écran de conception d’armures, ce qui signifie, par exemple, que le torse de plaque 061 porte en fait le numéro de référence 186.
Qu’à cela ne tienne ! 186 est égal à (61+1)*3, il me suffit donc de multiplier par trois le numéro d’ordre de la pièce d’armure que je souhaite !
Hehe, ça, c’est ce qu’un esprit logique ferait.
Pas un informaticien qui, ne l’oublions pas, n’est indispensable qu’à partir du moment où il a foutu un tel bordel dans le code qu’il n’est plus possible de le licencier sans devoir par la même occasion ré-écrire tout ce qu’il a écrit – ou salopé, selon les écoles – ou passer des mois à dénouer les noeuds.
Ben voilà, j’en suis là, comme je ne peux virer personne sauf moi – qui n’y suis pour rien – il me reste à démêler les noeuds.
Trente ans que c’est comme ça, pas de raison que ça change…

24 août 2018

Modifications structurelles importantes sur les haks de tileset qui étaient en conflit avec les 2DA de Myrda qui, il est vrai, n’avaient pas changé depuis 15 ans et généraient des conflits au niveau des portes et des écrans de chargement.
Il convient donc de TOUT recharger, le hak myrda_09 qui est nouveau mais aussi les haks de tilesets – oui, ceux qui étaient censés ne jamais être modifiés.

TooLz a utilisé pour la première fois les nouveaux haks de tilesets, les résultats sont magnifiques mais trop lourds, nous allons devoir procéder à des divisions des zones les plus grandes pour éviter d’horribles temps de chargement.

Le système de création d’objets n’est pas terminé, j’ai dissocié les armures des casques et simplifié le code. Il reste peu à faire, sans compter le debugging qui risque d’être coton. Ca n’avance pas assez vite à mon goût, mais le temps manque, ça devrait aller mieux bientôt.

23 août 2018

Je devrais terminer aujourd’hui le système de création des objets, avant d’attaquer le système d’enchantement qui, lui aussi, sera harmonisé de manière que tout objet passe par les mêmes routines de création.
Par exemple, un objet de coffre aura des propriétés standard là ou un objet d’artisanat offrira des meilleurs chances de réussir des enchantements additionnels et où un objet de quête recevra des enchantements standard, plus les enchantements propres à la quête.

Pour donner une petite idée des joyeusetés que je dois me farcir pour mettre tout ça sur pied, voici à quoi ressemble le début de la table de création d’objets :

2DA V2.0

   baseitem                 itemnumber itemtype   myrdaType basemodel        variations couleurs stack
1  BASE_ITEM_AMULET         19         16_Misc    4         nw_it_mneck020   50         ****     ****
2  BASE_ITEM_ARMOR          16         16_Misc    3         BASE_ITEM_ARMOR  ****       ****     ****
3  BASE_ITEM_ARROW          20         5_Ammo     5         nw_wamar001      3          4        99
4  BASE_ITEM_BASTARDSWORD   3          0_Melee    1         nw_wswbs001      8          4        ****
5  BASE_ITEM_BATTLEAXE      2          0_Melee    1         nw_waxbt001      7          4        ****
6  BASE_ITEM_BELT           21         16_Misc    4         nw_it_mbelt009   17         ****     ****
7  BASE_ITEM_BOLT           25         5_Ammo     5         nw_wammbo008     3          4        99
8  BASE_ITEM_BOOTS          26         16_Misc    4         nw_it_mboots001  4          4        ****
9  BASE_ITEM_BRACER         78         16_Misc    4         nw_it_mbracer002 22         ****     ****
10 BASE_ITEM_BULLET         27         5_Ammo     5         nw_wammbu008     myrdarefs  ****     50
11 BASE_ITEM_DAGGER         22         0_Melee    1         nw_wswdg001      7          4        ****
12 BASE_ITEM_DART           31         2_Thrown   5         nw_wthdt001      myrdarefs  ****     50
13 BASE_ITEM_DIREMACE       32         0_Melee    1         nw_wdbma001      4          4        ****
14 BASE_ITEM_DOUBLEAXE      33         0_Melee    1         nw_wdbmax001     3          3        ****
15 BASE_ITEM_DWARVENWARAXE  108        0_Melee    1         nw_waxbt001      7          4        ****
16 BASE_ITEM_GLOVES         36         21_Glove   4         nw_it_mglove008  22         ****     ****  

et la table de création d’armures :

2DA V2.0

   ca_torse nombre 0     1     2     3     4       5       6      7     8        9   10         11         12   13   14     15     16   17   18
0  ca_torse nombre pieds pieds tibia tibia cuisses cuisses bassin torse ceinture cou avant-bras avant-bras bras bras epaule epaule main main robe
1  0        10     0     0     21    21    16      16      3      1     2        6   0          0          0    0    0      0      0    0    9|
2  0        ****   0     0     0     0     0       0       9      2     0        6   0          0          0    0    0      0      0    0    ****
3  0        ****   6     6     4     4     5       5       3      3     10       6   0          0          0    0    0      0      0    0    ****
4  0        ****   6     6     5     5     6       6       3      4     10       6   0          0          0    0    0      0      0    0    ****
5  0        ****   6     6     1     1     5       5       3      5     8        6   1          1          2    2    22     22     0    0    ****
6  0        ****   6     6     2     2     6       6       3      6     6        6   1          1          2    2    22     22     0    0    ****
7  0        ****   3     3     1     1     5       5       3      7     10       2   1          1          1    1    10     10     0    0    5|6|8|10|
8  0        ****   6     6     1     1     5       5       2      8     8        6   1          1          2    2    1      1      0    0    5|6|8|10|
9  0        ****   6     6     1     1     6       6       8      9     2        6   1          1          2    2    1      1      0    0    ****
10 0        ****   6     6     2     2     6       6       8      10    2        2   1          1          3    3    6      6      0    0    5|6|
11 1        3      1     1     6     6     7       7       11     11    3        1   9          9          6    6    5      5      0    0    9|
12 1        ****   1     1     7     7     1       1       11     12    5        6   0          0          0    0    0      0      0    0    9|
13 1        ****   6     6     2     2     5       5       7      13    6        1   2          2          3    3    6      6      0    0    5|6|8|
14 2        7      7     7     6     6     7       7       1      14    3        1   4          4          5    5    7      7      0    0    9|
15 2        ****   7     7     7     7     7       7       5      15    3        1   23         23         0    0    0      0      0    0    9|
16 2        ****   7     7     7     7     7       7       12     16    3        6   0          0          0    0    0      0      0    0    9|         

Tout cela est compliqué par l’absence de cohérence – justifiée au demeurant – entre les différents types d’objets.
Certains ne se différencient que par une îcone d’apparence, d’autres sont composés de plusieurs parties comprenant chacune plusieurs modèles et plusieurs couleurs et d’autres sont tellement complexes que pour résoudre leur création je dois croiser plusieurs fichiers de données entre eux.
Quand ce sera au point, ce sera vraiment très bien, beaucoup mieux que le système actuel, et on pourra, par exemple, réaliser plusieurs fois une quête en obtenant chaque fois un objet différent, adapté à son niveau, ce qui procurera une très grande longévité au contenu.

22 août 2018

Je travaille au système de génération automatique de loot, les armures sont terminées, reste à faire les armes, c’est plus simple, je n’ai pas à gérer des centaines de combinaisons. C’est quand même du travail.

21 août 2018

Grosse frayeur !
J’ai voulu relancer le serveur avec le hak dégraissé et il ne démarrait plus. J’ai essayé de lancer le module Althea : rien. Un module vierge : pas davantage !
Pas de panique à bord, les femmes et les enfants d’abord !
Je me suis dit qu’un nouveau code serveur était peut-être disponible : rien.
Après de multiples tentatives, j’ai dû me résoudre à jeter le nouveau hak et repartir sur un backup.
Tout est rentré dans l’ordre, non sans m’avoir nerveusement fatigué. J’ai finalement dû refaire le travail sur le hak, il est moins dégueulasse que le précédent mais contient toujours des modèles obsolètes (et moches à pleurer) et des tilesets que je n’utiliserai jamais.
Je le laisse comme ça pour le moment, le serveur qui tourne et les haks disponibles sur le site – soit avec les nouvelles épées, nouvelles haches et nouveaux tilesets – sont en adéquation.

20 août 2018

Gros boulot pour rendre les armures aléatoires, j’ai finalement été contraint de réaliser un – grand – tableau avec 61 types d’armures possibles. C’est beaucoup de temps pour pas grand-chose, mais c’est une étape nécessaire pour débarrasser le module de tout blueprint et de pouvoir tout créer à la volée.
J’en ai profité pour dégraisser les haks d’encore une volée de vieux trucs qui traînaient et les réorganiser plus efficacement. Il y a des milliers de fichiers là-dedans, un chat n’y retrouverait pas ses jeunes, j’en ai un peu marre de travailler par étapes mais tant que je ne sors pas de la beta je n’ai pas le choix.
Enfin si, je pourrais repartir d’un hak vierge et ajouter des trucs chaque fois que je remarque qu’une ressource manque, mais ça prendrait cent fois plus de temps – quoique plus propre, mais bon…

19 août 2018

Comme prévu, la refonte des tous les objets magiques, c’est beaucoup de travail, mais j’avance. Impossible de reprendre les bibliothèques Bioware qui me seraient pourtant bien utiles, je dois refaire mes propres fichiers 2DA.
Le système de création d’objet se met bien en place et remplacera l’artisanat. Je pourrai vraisemblablement supprimer tous les blueprints, ce qui rendra encore le module plus léger. J’arrive finalement au même fonctionnement pour les armes/armures que pour les PNJs: j’obtiens toutes les variations, de type, de couleur et de propriétés à partir d’un seul blueprint.
Ce n’est pas fini et cet après-midi après l’entraînement d’aviron de Max je reprends la création de placeables avec lui, il ne connaît pas Photoshop, il a besoin de moi.

Le sytème des hakpaks a changé, j’ai ajouté énormément de choses (nouvelles épées, nouvelles haches, modèles HD divers, nouveaux tilesets) et je repasse donc sur un téléchargement fragmenté qui comprend:

Lien

Fréquence de modification

Informations de contenu

Très fréquent, à chaque augmentation de contenu. Fichiers de quêtes

Très fréquent, à chaque augmentation de contenu. A bien mettre dans le dossier ‘tlk’ et pas le dossier ‘hak’ ! Ressources de textes

Uniquement pendant la beta. Dès que j’aurai revu tous les modèles, cette partie ne changera jamais plus, les nouveautés iront dans des haks additionnels. Hak principal regroupant les modèles propres à Myrda

Jamais. A charger une seule fois et à oublier. Les nouveaux tilesets iront dans de nouveaux haks. Tilesets, aussi appelées cartes.

Jamais. Si j’ajoutais des musiques, je placerais un lien supplémentaire. Le chargement des musiques est de toutes façons optionnel. Musique

 

Je vais mettre au point un système pour informer à la connexion s’il faut ou non recharger la partie mobile.

18 août 2018

Nouvelle itération du système de loot. En vrac :

1° Création de la profession d’enchanteur. Il existe déjà, dans sa boutique à côté de Martouf. Créer une nouvelle branche d’artisanat accessible aux PJs ou utiliser le PNJ existant ? On verra, il y a du pour ou du contre.
2° Tous les objets qui tombent de toutes les sources sont adaptés au niveau du joueur mais de qualité inférieure à ce que peut produire l’artisanat, pas en terme de puissance, mais en terme de potentiel enchantable, de pureté donc.
3° Désenchanter un objet magique rend une gemme d’enchantement, que l’on peut aussi trouver à l’état brut dans l’univers, dont l’enchanteur a besoin pour améliorer un objet. Combiner ces gemmes donne des essences d’enchantement de niveau plus élevé avec une chance qu’elles soient détruites à chaque tentative de combinaison.
4° Plus le niveau d’un enchanteur est élevé, plus il  a de chances d’extraire un pouvoir particulier d’un objet. Enchanter un objet avec une gemme de pouvoir particulier tente de l’incorporer à l’objet sans modifier aucune autre propriété. Chances de réussite moindres que le processus classique, voir point 6
5° L’enchantement ajoute d’autant plus de propriétés à un objet que la gemme utilisée était puissante. Le niveau maximum d’une gemme est 8 qui donne 8 propriétés pouvant chacune être au maximum. Il est d’autant plus difficile d’obtenir le maximum d’intensité d’un enchantement de n’importe quel groupe de propriétés que le niveau initial de la gemme était faible.
6° Le joueur a une probabilité accrue d’obtenir un objet qu’il porte déjà.

Bon, ceci n’est pas complet, c’est même assez brut, je m’en vais écrire une librairie d’enchantement qui achèvera de me mettre les idées en place.

Update: j’ai déjà pissé deux cents lignes de code depuis ce matin malgré des élèves qui me balancent du travail au débotté, une installation rétive de Photoshop sur la machine de Max et les interruptions inhérentes à la vie de tous les jours. Mais je le sens bien sur ce coup-là, j’ai en main des éléments comme je n’en ai jamais eu, ça va le faire !
Ou bien demain je me rendrai compte que tout ça c’est du caca et back to the drawing board, c’est ça la vie d’artiste 🙂

Update 2: ça n’a pas tardé, y a avait du bon, du moins bon et de l’horrible, j’ai adapté le projet ce qui arrivera encore tant que toutes les pièces du puzzle n’auront pas trouvé leur place.

17 août 2018

Après quelques jours très chargés sur le front des graphismes, la routine de stabilisation du module devrait reprendre. Il ne me reste qu’à digérer un seul document d’information pour avoir fait le tour de ce qu’il faut maîtriser pour concevoir des modèles sur NWN. Enfin, ce qu’il faut maîtriser de basique, réaliser une créature avec ses animations, UV, normale et specular maps reste un travail énorme que je ne compte pas entreprendre de sitôt, mais je me suis remis à un niveau assez comparable à celui de 2003. Il faut dire que, benoîtement, je m’étais mis à l’apprentissage de Blender orienté image de synthèse, cinéma, animation, ce qui est très intéressant, mais absolument hors de propos pour Myrda qui utilise des techniques différentes. Ce qui a été appris est utile et transposable, mais par Réorx ! que c’est compliqué, c’est un métier à part entière !

Aujourd’hui, journée apocalyptique, des rendez-vous à n’en plus finir, j’arriverai peut-être à dégager deux ou trois heures pour travailler au système de loot qui continue de mûrir dans ma tête. Trois jours de congé la semaine prochaine, ça devrait aller mieux.

16 août 2018

J’ai reçu confirmation de Beamdog au sujet de notre bug de sacs. Il est causé par la pioche de mineur, pour des raisons qu’ils ont pris la peine de m’exposer mais qui restent obscures tant que je ne me suis pas remis à la fabrication d’armes et d’armures. Qu’importe, ils vont régler le problème à un prochain patch. Donc, faites gaffe, ne mettez pas la pioche de mineur dans un sac bourré de trucs utiles et chers, le tout peut faire *pouf* jusqu’à nouvel ordre.

TooLs a déniché de nouveau tilesets absolument magnifiques dans le workshop de Steam. Intégration à effet immédiat – prochain hak -, ce qui va permettre de virer les mochetés que j’avais intégrées sous Althea et qui n’auront finalement pas servi à grand-chose. Faut juste que je trouve le temps de décider quoi intégrer de toutes ces nouveautés.
Mon fils et moi travaillons toujours à l’apprentissage de Blender, ce qui va ouvrir des possibilités graphiques intéressantes, mais pas que ! Les modèles personnalisés seront la pierre angulaire de quêtes de nouveaux types et j’aimerais aussi que les personnages centraux de l’histoire aient une apparence correcte, en attendant que tous les modèles de NWN soient refaits, ce qui finira bien par arriver.

Programme du jour : travail sur le système de loot.
Ben non, ça c’est ce qui était prévu, en fait nous avons plongé à fond dans l’exportation de modèles de NWN vers Blender, travail et importation dans NWN. La tête va exploser, c’est sûr !
Je ne voulais pas faire ça maintenant, mais tant qu’on y était, autant se remettre à jour.
Ca va être fabuleux, mais, sans rire, la quantité d’informations à emmagasiner est terrifiante.
La suite au prochain numéro !

15 août 2018

Je peste depuis hier soir sur le système de loot que je veux mettre en place. Ras-le-bol de faire les choses à moitié, ce coup-ci je monte un système unique, robuste, évolutif et simple d’emploi.
Je vais en jeter ici les bases, cela m’aide aussi à clarifier les idées dans ma tête, parce que, franchement, c’est un sacré bordel. Le système. La tête aussi, pas la peine de te cacher je t’ai vu ricaner.

L’objectif final est que lorsqu’un joueur touche un loot, quelle qu’en soit la source – point essentiel : harmonisation – il obtienne quelque chose qui lui convienne, selon les modalités suivantes:
1° Probabilité accrue d’obtenir des objets équipés. Si je me bats à la latte, j’aurai plus de chances d’en looter une qu’un Kama ou une fronde.
2° Nombre de propriétés de l’objet croissant en fonction du niveau. Une seule propriété au niveau 1, jusqu’à 8 propriétés au niveau 40.
3° Facteur aléatoire de qualité croissant avec le niveau. Un niveau 1 touchera du normal ou du +1, un niveau 40 du +10 à +20.
4° Propriétés dépendantes de l’alignement. Les mauvais auront plus de pêche, les bons plus de défense, les neutres plus d’utilité.

A partir de là, je dois assembler des fichiers 2DA – qui sont la seule manière d’obtenir quelque chose qui ressemble à une matrice dans NWN – pour réaliser un ensemble de fichiers 2DA propres à Myrda qui permette de mettre le système en place. Le souci, c’est que les 2DA Bioware ont certainement beaucoup de sens pour les gens qui ont développé le jeu à l’époque mais sont aujourd’hui un fatras de brols mal ficelé par des gens qui à l’évidence ne se parlaient que devant la machine à café.
Je suis donc contraint de reprendre les informations utiles dans un tas de 2DA de base pour construire un réseau de fichiers qui lient entre elles les informations dont j’ai besoin.
Après quoi je définis mes groupes de propriétés, je reporte tout ça dans un 2DA final – aucune idée de combien de fichiers ça va me faire au total, je vais peut-être multi-dimensionnaliser mon fichier pour gagner du temps de lecture, verrai bien – je définis mes seuils de niveau et roulez jeunesse !

Simple non ?

14 août 2018

Tu aimes les donuts ? Mon fils et moi nous sommes mis à Blender, les possibilités sont gigantesques !

Sortie de la dernière extension de WoW.
J’aimerais bien y aller faire un tour, j’ai acheté la boîte d’extension.
Mais bon, pas le temps…

Je travaille sur la refonte du loot, puis boulot puis on verra bien.

Pour le loot, je souhaite introduire des variantes selon l’alignement.
Par exemple, un loyal-bon aurait de bonnes chances de toucher une sainte juste ou, plus communément, le don ‘tranchant’ et des protections contre l’alignement. Les armes d’un loyal bon seraient moins brutales mais plus riches que celles d’un mauvais. J’ai toujours voulu donner un sens concret aux alignement, c’est peut-être une occasion.
Je bosse là-dessus pour le moment.

13 août 2018

La quête des écuyers est terminée. Son seul objectif est de permettre des modification plausibles de l’alignement d’un joueur, fonction qui était possible sur Althea en allant s’asseoir sur un des trois trônes de Silfenis. Pas très role-play et sans relief. Ici, c’est différent, le joueur se trouve impliqué dans des situations militaires et son comportement est évalué pour apporter de légers ajustements à son alignement. Cette quête est surtout présente pour permettre de récupérer un paladinat perdu, ou d’y accéder. Il n’existe à l’heure actuelle pas d’impératif de modifier des alignements vers les neutres et en-dessous.
Cela a été très difficile à mettre au point car le joueur peut choisir une multitude de routes, là où on s’attend à ce qu’il aide ses camarades, il peut aussi bien les égorger, ou les épargner et tuer l’officier commandant ou rien de tout cela et foncer dans les ennemis au mépris des ordres. Beaucoup de chemins possibles qui ont chacun leurs conséquences.
Je publierai – enfin – le 077 ce soir, probablement, sauf si je vois que j’ai bien avancé dans la refonte des objets magiques liés au niveau des joueurs qui les obtiennent auquel cas je le publierai plus tard, rien ne presse.

Mon prochain chantier est donc l’harmonisation des objets magiques, qui seront toujours donnés en fonction du niveau du joueur avec une légère variance. Cela signifie, en pratique, qu’un niveau 1 obtiendra par le loot – l’artisanat est différent – par exemple une épée qui peut être +1 ou +0, là où un niveau 20, sur le même monstre, obtiendra une arme de +4 à +7 avec de 1 à 4 propriétés additionnelles – chiffres aléatoires pris pour l’exemple.

Après mure réflexion, je ne change rien à l’artisanat, pour plusieurs raisons.
La première, c’est que le joueur qui va se donner la peine de monter son artisan pourra en utiliser la production, même s’il obtient une épée +5 au niveau 1. C’est logique, le temps qu’il aura passé à la forge, il ne l’aura pas passé à accumuler les niveaux et donc à temps égal il aurait de toutes façons obtenu le niveau nécessaire pour manier une +5.
Ensuite, seul les produits de l’artisanat auront la pureté nécessaire pour recevoir des enchantements additionnels, fragments d’âme myrdienne en tête, gemme myrdiennes et autres choses à venir.
L’artisanat reste donc incontournable.
Cela permet de concilier des joueurs aventuriers à qui l’artisanat file des boutons, mais qui auront besoin des artisans, et des artisans qui aiment prendre leur temps et qui obtiendront de l’or par les joueurs aventuriers en vendant leur production.

Mon travail à présent est de créer un fichier 2DA, un de plus, qui reprend tous les objets disponibles dans le monde avec des tables de probabilités qui seront d’une part le niveau du joueur qui provoque l’apparition de l’objet et d’autre part des groupes de désirabilité.
Késako ?
Et bien, sur une épée, le premier groupe de désirabilité ne comprendra qu’un élément : l’altération, de +1 à +20
Le deuxième groupe de désirabilité comprendra ‘tranchante’, ‘vampirique’, ‘épée de justice’ – par exemple, j’en suis à la première analyse – dont l’une – et donc aucune autre – tombera si le joueur a le niveau pour déclencher le deuxième groupe et si la chance lui sourit.
Le troisième groupe sera ‘augmentation de caractéristique’, ‘protection contre sorts de feu/froid/xxx’, ‘lumière’, ‘vision véritable’ et ‘rapidité’. Une de ces propriétés sera créée si le PJ a le niveau et s’il a de la chance.
Un dernier groupe reprendrait tout le reste de ce qui est possible, des protections contre les sorts, des effets au toucher, des tas de trucs sympas mais derniers sur la liste.

J’en suis à l’analyse conceptuelle du système, j’aurais dû commencer par là mais je chemin est long depuis la philosopie +5 maximum d’Althea, j’ai dû plusieurs fois revoir ma position.

12 août 2018

Le temps ! Pas assez de temps, c’est l’horreur !
Myrda, c’est gigantesque, j’ai une foultitude de choses à faire et peu sont simples, il me tarde d’avoir remis d’équerre tout ce qui n’est pas parfait.
Je termine ce soir la quête des Ecuyers, j’ai trois épreuves et j’en resterai là pour l’instant, je voudrais une quatrième épreuve mais l’inspiration et le temps me manquent, je vais l’ouvrir au jeu et la laisser ainsi pour le moment.
Je dois reprendre de toute urgence le test des dernières quêtes que je n’ai pas encore parcourues, dont certaines sont à coup sûr cassées parce que les PNJ tapent le carton dans l’éditeur au lieu de faire leur taf dans le monde.
Mais ça se rapproche, ça m’aura quand même pris pas loin de quatre mois tout ça !

Pour le moment, comme mon fils est en vacances, je passe du temps avec lui à lui apprendre la programmation en C, ce qui ne servira à rien puisqu’il n’aura pas le temps pendant l’année scolaire d’approfondir Aurora, mais depuis une semaine nous avons attaqué Blender, et nous arrivons à suivre cette excellente série de tutoriels.
Pour Althea, j’ai utilisé 3DS Max – comme un cochon, je me suis démmerdé comme j’ai pu à l’époque – mais à présent je vais utiliser Blender pour les futurs modèles de Myrda puisqu’un joueur actif a créé les plugins d’importation/exportation NWN-Blender et que d’excellent tutoriels sont disponibles sur Youtube ce qui facilite grandement l’apprentissage.

Pour vous donner un aperçu des progrès réalisés en 15 ans, regardez ce qui est arrivé à notre bonne Aribeth :

J’ai l’intention de créer de nombreux modèles, pour commencer des placeables; puis des armes, des morceaux de tilesets additionnels et pour finir des créatures. J’attends une tablette graphique et je dispose de Substance Painter qui va me permettre de peindre mes modèles directement en 3D sans passer par une UV map.

11 août 2018

NWN arrive sur Android, tablette et téléphone, voici la toute première image publique qui le montre, capturée sur le stream de Beamdog d’hier soir.

En pratique, je ne sais pas trop ce que cela signifie pour nous.
C’est peut-être une opportunité que je devrais saisir pour préparer le module à un afflux de nouveaux joueurs, ou pour développer des modules d’histoire à la façon des campagnes officielles.
Dans tous les cas, je termine d’abord ce qui a été commencé, il reste pas mal de contenu qui n’a jamais été testé.

Après cela, j’en ai peur, je devrai extraire absolument tous les textes du module pour les placer dans myrda.tlk ce qui me permettra de les traduire. Et dans le même temps, ce n’est pas le travail qui me rebute, ni l’anglais, mais l’esprit. Althea était en français parce que je suis de culture française et que j’ai plus de vingt ans de DM papier/crayon derrière moi – j’anime encore tous les vendredi soirs. Myrda est développé en français pour les mêmes raisons, en plus que j’ai écrit les romans qui nous servent de background en français, et disposer du module en anglais me laisse craindre de perdre cet esprit.

D’un autre côté, NWN sur mobile va forcément attirer beaucoup de monde et beaucoup de francophones ; ouvrir les portes à tous ceux qui ne parlent pas français – car ceux qui choisiraient l’anglais n’en sont pas pour autant anglophones natifs – risque de provoquer un afflux de joueurs que mes deux serveurs ne pourront peut-être pas encaisser.

Beaucoup de questions en suspens !

10 août 2018

Phase 3 de cette §*$@& de quête des Ecuyers bien avancée.
Remplacé les triggers génériques de Myrda par des génériques tout court, ça me causait plus de problèmes qu’autre chose.

09 août 2018

Terminé la phase 2 de la quête des Ecuyers, j’entame la phase 3.

08 août 2018

Gros orages cette nuit, panne de secteur assez longue et à répétition. La nécessité d’un onduleur-UPS se fait sentir, mais bon, on verra ça si le serveur connaît dans l’avenir un regain de popularité, je supporte seul tous les coûts pour le moment.

La phase 2 de la quête des écuyers est pratiquement terminée. Je suis assez content du résultat, comme la phase 1 il s’agit d’une cinématique assez complexe. Le joueur peut cependant facilement empapouater le bon déroulement des opérations par des actions non prévues. Enfin, si, prévues, mais non gérées. Par exemple, lorsque le joueur rencontre un PNJ blessé, il lui est loisible de le soigner, aux bandages ou par un sort. S’il le fait, le PNJ le remercie et le suit jusque la fin du donjon. Simple, non ? Oui, mais si au lieu de balancer un sort de soins le joueur envoie n’importe quel sort qui ne tue pas le PNJ, par exemple un buff de dex ou une peau d’écorce, l’effet sera le même ! Je pourrais, bien sûr, programmer des tests pour m’assurer que le sort a bien modifié positivement les points de vie du PNJ – et je le ferai probablement, je prends juste un exemple – mais c’est du travail pour rien et c’est volontairement que je laisse des lacunes dans la gestion des actions des joueurs, parce que le temps est ma ressource la plus précieuse et que je préfère la convertir en contenu qu’en protections.
Disons que je me contente de gérer les actions les plus logiques des joueurs, surtout dans du contenu cinématique qui est complexe à programmer.

07 août 2018

Je suis en contact avec un dev de Beamdog pour résoudre le bug des sacs, ça prend un peu de temps, j’ai dû lui préparer des fichiers avec et sans corruption et lui exposer le problème de manière qu’il puisse le reproduire, ce qu’il a pu faire, reste à attendre qu’il détecte la source du problème et incorpore un fix au prochain patch, ce qui fera deux corrections pour nous, on ne va pas se plaindre !

Suite à une requête que j’ai postée sur les forums de développeurs de contenu, un gars m’a répondu qui a écrit les addons d’importation/exportation pour Blender, logiciel gratuit – ce qui est à peine croyable vu l’usine à gaz que c’est – de modélisation 3D. Tout a beaucoup changé depuis que j’utilisais 3DS Max, en mieux. Plus performant, plus facile, je vais pouvoir créer nombre de modèles spécifiques pour nos besoins, au début des armes, des placeables et des tilesets et plus tard des créatures.
Mon fils et moi nous sommes attelés à la tâche d’apprendre le maniement de Blender en suivant à raison de deux par jours les épisodes de tutoriels postés par Blender Guru, qui explique très bien comment s’y prendre pour maîtriser la bête.
Ce n’est évidemment pas la priorité, je dois d’abord terminer de tester tout ce qui existe dans le module et créer le contenu qui nous mènera aux capitales des autres races par le biais d’une histoire évolutive.

06 août 2018

Bug des sacs. Il arrive que le contenu d’un sac ne s’affiche plus correctement. Certains objets sont visibles et on ne peut librement les déplacer dans le sac, preuve que “quelque chose” d’invisible est là, tapi dans l’ombre. Pour faire face à ce problème, il convient de vider du sac tous les objets visibles, de se déconnecter puis reconnecter. Lorsque le jeu plantera en essayant d’ouvrir le sac, c’est qu’on en a retiré tout ce qui était possible, il faut fermer NWN par le gestionnaire de tâches, par clic-droit sur le programme suivi de “fin de tâche”, de revenir sur le serveur et de jeter le sac. Oui, il contient peut-être des objets importants, mais il est corrompu, il n’y a rien à faire. Ce problème arrive – pour autant que je puisse en être certain – lorsque je change des objets de simples à empilables. J’essaie d’être propre et de ne pas utiliser le même tag pour les nouveaux objets mais il peut rester des scories sur des persos qui ne se sont pas connectés depuis un certain temps.

J’ai augmenté la limite de sacs de 6 à 10.

05 août 2018

Mis au point la quête de Golemania qui était bien trop difficile, voire carrément incompréhensible, et ne donnait pas sa récompense de fin, l’outil à invoquer des golems – qui n’était d’ailleurs utilisé nulle part dans le module. 15 après, impossible de me souvenir pourquoi.

Modifié et testé la quête de la bibliothèque interdite pour que le bâton de magicien ne soit pas un requis, puisque cette quête donne aussi des parchemins divins utiles même aux guerriers. N’importe quel bâton fera l’affaire.

Jeté les bases d’un nouveau système de récompenses qui définit les caractéristiques essentielles des objets et les adapte au joueur qui les reçoit en fonction de son niveau et d’une dose de hasard. A programmer après la quête des Ecuyers.

Réglé un énorme bug bien vicieux qui m’a été révélé par le chien de la guilde des inventeurs qui s’est mis à converser avec un gnome. Ce code est tellement complexe et aléatoire dans ses conditions de réalisation que je cherchais un PNJ qui puisse converser avec un autre PNJ qui ensuite cherchait un PNJ avec qui converser. Totalement idiot. J’avais donc bien les tests nécessaires sur les 2 premiers PNJ pour vérifier qu’ils pouvaient soutenir une conversation mais évidemment aucun test sur la troisième recherche inutile, ce qui avait l’effet cocasse de faire parler les chiens.

04 août 2018

Le système d’aide par la pierre de destinée fonctionne bien, cela ne me prend que quelques secondes pour ajouter les deux lignes d’aide disponibles pour une zone.
Le seul souci, c’est de faire parvenir au joueur les modifications que j’apporte aux fichiers 2DA et au TLK.

A ce sujet, de bonnes nouvelles de chez Beamdog, qui travaille sur une version Android du jeu :
We continue to work on the tablet version of NWN:EE. “NWSync”- an upcoming feature for Neverwinter Nights: Enhanced Edition which will provide an auto hak and tlk’s downloader once you connect to a server in the game – will help not only PC players, but also tablet players.
En clair, il sera possible de synchroniser automatiquement les haks, ce qui va grandement me simplifier la tâche, pour le moment le serveur et moi avons une version des ressources, et les clients une autre, ce qui est fastidieux à maintenir, mais vu la cadence à laquelle j’apporte les changements, je n’ai pas le choix.

Je continue de tester tous les donjons que je peux trouver avec Marcel, c’est la seule chose qui me reste à faire avec terminer la quête des Ecuyers.

03 août 2018

Enormément de travail aujourd’hui et problèmes familiaux, peu de temps pour le développement.
Je vais introduire les textes d’aide pour les quêtes que j’accomplis avec Marcel, certaines sont difficiles à comprendre et je ne veux limiter les prises de tête. Le système d’aide me convient, c’est un choix, et les choix c’est toujours bon.

J’ai modifié ce matin l’ASSP d’une manière très simple et efficace pour que des mobs ne se trouvent pas prisonniers dans une zone inaccessible, derrière une porte verrouillée comme à Bataille éternelle par exemple. J’ai ajouté au fichier assp.2DA une colonne NOCENTER qui définit le rayon autour du point de spawn dans lequel aucune créature ne peut apparaître.

D’une manière générale je suis satisfait de la vitesse de leveling, je suis déjà 17 avec Marcel, j’ai pris 2 niveaux rien qu’en cassant du squelette devant le mausée des Georifel. J’ai cassé mon premier objet depuis la refonte du système de casse et j’ai pas eu de chance : disjonction directe, donc objet perdu. C’était un artefact myrdien, j’ai simplement repris une épée +8 craftée avec du mythril, elle marche aussi bien.

Je ne suis par contre pas satisfait des récompenses de quête, elles sont forcément trop fortes ou trop faibles. Je vais faire en sorte qu’elle s’adaptent au niveau du joueur.

02 août 2018, Module 075

Tous les bugs connus sont résolus, même celui qui empêchait de s’identifier automatiquement à la connexion aux forums.

L’inventaire des créatures est entièrement détruit à leur mort, même les objets qu’elles sont censées laisser sur leur cadavre, que je dois donc reconstruire s’il s’agit de composants d’artisanat. Ce n’est qu’un moindre mal, car ainsi je recrée des blueprints empilables.

Pour le fun, j’ai corrigé aujourd’hui le bug le plus rigolo que j’aie jamais vu, dans la quête – infaisable, il faut que je la simplifie – de l’Equilibre.
Un script commençait par ces lignes élégantes :
SetLocalInt(OBJECT_SELF, “eql_sw”, GetLocalInt(OBJECT_SELF, “eql_sw”));
ce qui revient à dire : mets dans la voiture les gens qui sont dans la voiture.
Tout le monde l’aura compris – il ne m’a fallu que deux heures pour le découvrir – que le code correct était :
SetLocalInt(OBJECT_SELF, “eql_sw”, !GetLocalInt(OBJECT_SELF, “eql_sw”));
Va savoir comment le toolset m’a bouffé un point d’exclamation, d’autant que cette quête fonctionnait très bien à l’époque : mystère !
Et c’était comme ça tout le temps, dans les années folles, des cartes corrompues, des scripts tronqués et un serveur qui plantait pour un oui pour un non.
Bon, il n’y a plus personne sur le serveur, mais qu’est-ce que je m’éclate ! Ma machine va 50 fois plus vite qu’à l’époque et les outils sont d’une robustesse irréprochable. Rien que pour ça, je continuerais bien le développement quelques années tiens !

J’inaugure aujourd’hui un nouvel outil de jeu : les indices de Pierre de Destinée. Vu la grande simplicité de la quête de l’Equilibre – un truc à manger son chapeau – il me paraît opportun de livrer des indices au joueur en échange de points d’aventure.

01 août 2018

Je travaille sur la quête des écuyers. Je le sentais bien qu’elle allait me causer des soucis, j’ai à régler des cinématiques qui nécéssitent un paramétrage complexe pour être réalistes, je travaille simultanément sur les scénarios – ils sont plusieurs -, les décors – pour que les scènes soient bien visibles et ne permettent pas de court-circuiter le scénario – et le scripting assez complexe car impliquant les actions-réactions de plusieurs intervenants, avec des joueurs de classes et niveaux différents.
Ce sera fait, mais il me tarde de revenir à des choses plus simples !

Les peaux d’humanoïdes et les parchemins qui en découlent sont maintenant empilables par 50 et reçoivent de nouvelles icônes plus réalistes – un peu trop pour les peaux : beurk !

Nouveau hak, myrda_05.hak et nouveau myrda.tlk
J’ai résolu de ne plus diviser le hak en 2 – les ressources principales d’un côté et les petits fichiers 2DA susceptibles de changer régulièrement dans un hak de développement annexe.
C’est trop compliqué et à l’heure actuelle 150Mo c’est de la gnognotte, on peut donc se permettre de le recharger assez souvent.
La difficulté reste pour moi de créer un hak pour les clients, qui comprend absolument tous les fichiers, et un hak différent pour ma machine de développement et le serveur, identique à celui des clients mais diminué des 2DA que je change à volonté, et que je dois laisser dans le dossier ‘override’ de mon PC et du serveur.

Une modification importante que je vais reporter à la page dédiée aux débutants pour qu’elle soit bien remarquée : le mode recherche octroie à présent un bonus de 50% au talent de fouille.

J’ai réglé un bug vieux de 15 ans : la salle des coffres de la commanderie, autrefois celle du bourgmestre de Boisnoyé, était corrompue à un point tel qu’il y était impossible d’ouvrir un coffre – va savoir pourquoi. J’ai remplacé tous les anciens coffres par des nouveaux et le problème est résolu. Ceci pour me rappeler à quel point c’était une torture de travailler avec le toolset et le serveur de 2002.

31 juillet 2018

J’en avais marre des parchemins créés sur Althea qui prennent 4 places dans les sacs et ne sont pas empilables. Il fallait bien qu’un jour j’apprenne comment créer des sorts, c’est chose faite. Ces parchemins ne prendront donc plus qu’une case dans le sac, seront empilables par 10 et auront une icône propre. On pourra aussi les apprendre pour les mettre dans son livre de sorts, mais ça je préfère éviter car ils sont puissants.
En tout état de cause, c’est une avancée majeure pour le module car cela signifie que nous allons pouvoir disposer de nos propres sorts et que, surtout, les adversaires auront accès à des sorts uniques ce qui va me servir pour la campagne que je construis.
Créer un sort n’est quand même pas de la petite bière, il faut :
1° Modifier le spells.2DA pour ajouter le nouveau sort et adapter tous les paramètres du sort, notamment la référence au script qu’il doit exécuter.
2° Ecrire le script que déclenche le sort.
3° Modifier le .tlk propre au module pour pouvoir associer les références de textes du spells.2DA au .tlk, sachant que les textes de 1 à 16.777.000 sont réservés à NWN et que seuls les textes à partir de 16.777.618 (soit 1 000 000 000 en binaire) peuvent être utilisés dans des hakpaks
4° Modifier le iprp_spells.2DA pour définir les propriétés du sort
5° Créer une îcone iss_<nom du sort>.TGA en 32 bits avec masquage alpha, brune, pour l’affichage dans l’inventaire
6° Enregistrer la même icône avec la couleur modifiée en violet pour l’affichage dans le livre de sort sous is_<nom du sort>.TGA
7° Créer les blueprints des parchemins de sort

Cette technique nous permet d’envisager des sorts pour les classes qui n’en lancent normalement pas, mais ça, c’est du futur.

Je n’ai pas avancé d’un iota sur la quête des écuyers, c’est un vrai repoussoir ce machin, je m’y colle ASAP.

30 juillet 2018, module 073

Refonte complète des routines de casse d’objets. La probabilité devient la même pour tous les joueurs, indépendamment de leur niveau et de leur nombre d’attaques par round ou du nombre d’effets de sorts qui peuvent survenir par round.
De plus, les objets ne cassent pas forcément, ils peuvent s’affaiblir, soit perdre une propriété magique, épuisée.
S’ils cassent, ils causent une disjonction dans les 30 mètres, ce qui fait très mal (30 D6) mais a 10 fois moins de chances de se produire que l’affaiblissement de l’objet.
Tout ce code a été copieusement dégraissé (y compris celui de Bioware à l’évidence passé dans de nombreuses mains qui ne savaient pas toujours ce que les précédentes avaient fait…) et la performance du serveur devrait s’en trouver grandement améliorée.
Les routines sont longues, des centaines de lignes de code, mais à chaque attaque ce ne sont que quelques cycles demandés au processeur, avec une pointe de puissance uniquement quand un objet casse.
Je suis très satisfait de cette révision, elle devrait soulager le serveur, être plus équitable et plus facile à adapter en fonction du feedback, il ne reste qu’un seul script concerné : nw_c2_default6 et c’est tout.
Reste à régler la fréquence de casse pour que le système soit équilibré.

Reprise de la quête des Ecuyers. J’y consacre l’après-midi de 14 à 18, après quoi je repars en tests.

29 juillet 2018, module 072

J’ai mis de côté la programmation de la quête des Ecuyers, pourtant essentielle puisqu’elle permettra des changements d’alignement un peu plus roleplay que les trônes de Silfenis sur lesquels il suffisait de s’asseoir, mais je tiens à publier un module 072 débarrassé de tous les bugs connus à ce jour. Aucune idée du temps que cela va me prendre.

J’ai terminé l’illusionniste de Syrthe. Il marque pour moi une rupture franche avec la programmation d’Althea, pour plusieurs raisons:
1° Aucun blueprint n’a été nécessaire. J’ai utilisé le même blueprint pour l’enchanteur et pour son chien. J’en ai créé un pour le mannequin pour des raisons de facilité et parce que j’en aurais besoin par la suite, mais ce n’était pas nécessaire. Je peux modifier tout ce que je souhaite sur le blueprint de base, race, sexe, taille, tête, couleurs de cheveux et de peau, habits, etc. J’ai déjà utilisé cette technique pour les spawns d’ambiance et je me suis construit une petite librairie qui me permet de faire tout ce que je veux facilement.
2° J’affecte les scripts que je veux à n’importe quel événement des créatures, ce qui me permet de les faire changer de comportement dans une même zone selon les besoin de la cinématique. Cette technique sera utilisée pour modifier l’intelligence artificielle des suivants et mercenaires, pour les combats de fiefs tant que pour les raids.
3° J’ai utilisé un très grand nombre d’effets spéciaux dans le laboratoire du gnome, rompant avec la tradition de sobriété d’Althea. Le chien, victime des caprices de son maître, change d’apparence à tout bout de champ et une multitude de sorts s’abattent sur des orbes un peut partout dans la salle.
4° Les fichiers 2DA sont extrêmement pratiques pour contenir les informations les plus diverses. Ainsi, les modèles de bouclier sont un capharnaüm indescriptible, les gens qui ont construit les modèles ont même poussé le vice assez loin pour utiliser des noms de textures différents des noms de modèle. Bref, on saute du 49 au 58, jusqu’au 65 pour repartir sur les 91 et suivants et ça se termine au-delà de 200 pour seulement une cinquantaine de modèles d’écus. Or, les boucliers, c’est comme les gemmes, c’est mon dada, j’ai donc pris tout ce que j’ai trouvé de qualité (et ce n’est pas facile dans le fatras laissé par les enthousiastes). Il me fallait donc une matrice des 50 boucliers pour que je puisse les manipuler dans des boucles. C’est possible de hardcoder ça comme un sagouin dans une librairie, mais avec un fichier 2DA je le fais élégamment et je peux même changer le contenu des hakpaks sans plus toucher au code, il me suffit d’ajouter au 2DA les nouvelles informations. J’ai créé pour l’occasion un nouveau 2DA, myrdarefs, qui reprend non seulement les boucliers, mais aussi une liste de prénoms masculins du moyen-âge et la liste des effets spéciaux utilisables sur des objets de décoration.

Bon, allez, j’ai passé une bonne partie de la journée sur les routes pour conduire le gamin à son stage d’aviron, il est temps de débugger à tour de bras, pour reprendre – enfin – le développement de la quête des écuyers. Qui est vachement compliquée, faut toujours que j’aille m’enferrer dans des trucs pas possibles…

28 juillet 2018, module 071

Je continue à travailler sur la quête des écuyers de la Commanderie qui remplace celle du Gras-Al. Les idées sont là, mais elle est difficile à programmer, et régler tous les bugs qui me sont rapportés et que je rencontre demande beaucoup de temps.

Une nouveauté qui sera appréciée : je vais introduire dans l’univers un illusioniste gnome qui moyennant gemmes pourra changer l’apparence des boucliers (et d’autres choses quand j’aurai le temps).

27 juillet 2018

L’épée d’Ulgrim apparaissait hostile pour une raison inconnue. Je pense avoir réglé le problème, à confirmer. La récompense pour les loyal-bon est grandement améliorée, c’est une Sainte-Juste, après tout.

La quête du Gras-Al est remplacée par une nouvelle quête, que je vais imaginer et implémenter dès aujourd’hui avec mon fils.

Certaines zones ont reçu des spawns additionnels. Au fil du temps, je me rendrai compte des réactifs qui manquent et en ajouterai, ce n’est pas la priorité absolue.
La plus grande des priorités, c’est d’avoir un module stable avec toutes les fonctionnalités opérationnelles, ce qui n’est pas loin d’être le cas.
Je vais donc lancer les quêtes d’histoires impliquant Lassiter, Dalamar et Nakar, pour introduire les héros de l’univers – de qui les joueurs ne seront jamais des porteurs d’eau, ils sont là pour enrichir l’histoire et inspirer les joueurs.
Mon objectif est d’introduire une quête par jour jusqu’à avoir découvert Sadara, Sevelin et Selfika. C’est humainement impossible, mais c’est l’esprit.
Cela suffira pour amener les joueurs niveau 40 après quoi j’introduirai raids et campagnes.

26 juillet 2018, module 070

Les courbes d’expérience sont désormais moins dures, ma précédente modification était trop exigeante, et en plus trop linéaire.

Remis le coucou en service lorsqu’on active l’Armageddon à la mémoire (disponible pour les super users). Le module redémarre, sans perte de connexion pour les joueurs, mais il faut toucher le coucou pour revenir à son ancienne position.

Revu les objets créés par la forge, trop facilement améliorés ce qui permettait de s’enrichir ehontément.

Rétabli la casse des outils d’artisanat. Je l’avais supprimée, mais en réalité elle fait partie de l’immersion, je l’ai rétablie.

Il est à présent possible d’invoquer Sanbrui par la pierre de destinée pour déverrouiller une porte ou un coffre. Quoi que je le déconseille vivement.

25 juillet 2018, module 070

La pénalité à la mort est diminuée mais s’applique en totalité immédiatement, pour éviter les questions.

Une seule attaque par round pour les mineurs, qui obtiennent gratuitement hâte. Le nombre d’attaques normal est restauré à la sortie de la mine et à l’entrée dans l’univers par sécurité.

Le tissu reste à présent dans l’établis entre deux fabrications.

Nouvelle courbe de progression d’artisanat pour tous les métiers, à présent indépendante de la réussite ; toute action donne donc droit à une chance de progresser.

1 14.50
4 10.29
7 8.58
10 7.50
13 6.70
16 6.07
19 5.55
22 5.10
25 4.71
28 4.37
31 4.06
34 3.78
37 3.52
40 3.29
43 3.07
46 2.86
49 2.67
52 2.49
55 2.32
58 2.16
61 2.00
64 1.86
67 1.72
70 1.58
73 1.46
76 1.33
79 1.22
82 1.10
85 0.99
88 0.89
91 0.79
92 0.75
93 0.72
94 0.69
95 0.66
96 0.62
97 0.59
98 0.56
99 0.53
100 0.50

 

24 juillet 2018

Je trouvais l’icône des fioles d’eau inadaptée, on aurait dit de la glace, je l’ai refaite. Je ne sais pas s’il est nécessaire de recharger les haks, je dirais que oui par sécurité.

Réparation du serveur 2 dont le ventilateur de l’alimentation était tombé en rideau. Le plus curieux, c’est que l’alim fournissait toujours du 12V à sa prise ventilo et que ledit ventilo tournait à merveille sur les prises molex qui pendouillent élégamment dans le boîtier – je suis un méga-pro pour le cable management : tu pousses tout dedans et si ça ne fait pas “vrrrrrrrrrrrrrrrrrrr” c’est qu’aucun câble n’est dans le chemin d’un ventilateur, tu peux refermer.
Après – mûre – réflexion, j’en suis venu à la conclusion qu’une résistance ou la sonde de température a fondu dans l’alim, qui a plus de 10 ans, ce qui me met une résistance infinie et donc une intensité nulle. Selon V=RI, tu l’auras compris.
Donc, démontage de l’alim, se prendre le jus deux fois parce que débrancher le cordon d’alimentation c’est trop de boulot, couper le câble du ventilo, le faire sortir par un petit trou derrière l’alim et aller le ponter sur une molex, non sans avoir mis en série une petite résistance de 100 ohms histoire que le ventilo ne me fasse pas le bruitage de l’aéroport le plus proche.
Ca va, c’est bon, le serveur est reparti, il ronronne gentiment à côté de moi le temps que je surveille qu’il ne dégage pas une odeur de brûlé, après quoi il rejoindra son grand-frère dans la salle machines. Soit la cave à vin.

Le module publié aujourd’hui sera le 069 et comportera la quête de stabilisation d’enchantement d’objets par fragments d’essence myrdienne.
Un seul endroit dans le monde permet d’obtenir un de ces fragments, sur un timer de 10 jours.
Je compte ajouter ces fragments comme loot des cartes au trésor et sur certains boss.
Il faudra doser leur disponibilité, ce que je ne pourrai faire qu’en jouant – oui, je l’ai déjà dit, un de mes persos niveau 6 !

23 juillet 2018

Couche alpha créée pour toutes les icônes récemment ajoutées, soit les gemmes, minerais, lingots, etc. Ca m’énervait trop d’avoir ces fonds tout noirs tout moches dans l’inventaire, à présent la présentation est pro. Enfin, acceptable. J’ai mis à jour le hak en download mais son chargement est strictement optionnel, c’est juste cosmétique, ceux qui ne le chargeront pas auront les nouvelles icônes à la version suivante, ce n’est pas un problème.

Dernière main à la quête de stabilisation d’enchantement d’objets par fragments d’essence myrdienne.

22 juillet 2018

Le premier roman de la sage Myrda est à présent disponible en format epub, plus facile à lire.

J’ai créé la quête de stabilisation des artefacts enchantés par fragment d’âme myrdienne.

21 juillet 2018

Amélioration de la mine terminée.

Miner offre à présent la possibilité de trouver une gemme myrdienne rare cachée dans la pierre. Le souci, c’est qu’une gemme :
1° c’est petit
2° ça roule
3° si on la perd de vue, bonjour pour la retrouver dans la couche de crasse du fond d’une mine.
Donc oui, ces gemmes sont cool parce que les assembleurs peuvent les enchâsser dans les objets pour obtenir des bonus de caractéristiques, mais faudra avoir des réflexes affûtés et le sens de l’observation pour mettre la main dessus !

J’ai encore d’autres idées pour la mine, comme par exemple libérer des ‘choses’ du plan élémentaire de la terre à force de casser des cailloux, je ferai probablement cela un peu plus tard, ce n’est pas une priorité.

L’assemblage a été modifié pour permettre d’enchâsser les gemmes dans des objets (n’importe lesquels).
Comme souvent, 20 minutes de programmation, le reste de la journée pour debugger.
Le petit truc sympa qui rend fou : j’ai besoin de faire une copie de l’objet enchanté directement dans l’inventaire du joueur ce qui me permet d’effacer tout le contenu de l’établis pour empêcher toute tricherie et gérer les piles de gemmes. Seulement voilà : si je copie l’objet après l’avoir modifié, impossible d’augmenter le bonus par plusieurs gemmes, j’obtiens autant de lignes non cumulatives qu’on utilise de gemmes, par contre si je le copie d’abord dans l’inventaire du joueur avant de le modifier, tout se passe à merveille. Elle est pas belle la vie ?

J’ai encore un problème avec le canal alpha des fichier TGA d’îcones, je ne sais plus comment on fait, j’ai manqué de temps pour me documenter correctement, je devrai le faire demain, hors de question que ce ne soit pas parfait et j’ai de toutes façons besoin de me refamiliariser avec les canaux alphas pour quand je vais me remettre à la modification de tilesets et au texturages d’objets et de monstres.
Bref, j’ai fait moins que je ne le devais aujourd’hui, visite à un ami défunt oblige, mais cette addition au minage est vraiment superbe, ça rend une activité fastidieuse finalement fascinante.
Et j’ai encore des idées.

Inutile de préciser que mon guerrier niveau 6 est toujours niveau 6 comme sont niveau 6 tous les persos que j’ai essayé de monter, si je n’avais pas conscience d’être au bout du tunnel, magnifiquement aidé pour nos deux valeureux bêta-testeurs, je ne serai pas si confiant.

ToolZ est passé me dire bonjour sur le TS3 de Myrda, qui fonctionne donc parfaitement, c’était un très grand plaisir de lui parler, j’ai gardé le meilleur des souvenirs de notre collaboration passée, malheuresement avortée pour cause de divergences philosophiques entre les gestionnaires serveurs et les designers. Lui, Wildfar et Mil sont les joueurs pour qui je me tue à l’ouvrage, ils méritent le meilleur !

Bon, deux heures du matin, demain rando VTT, je baisse le rideau !

20 juillet 2018

J’ai réalisé de nouveaux hakpaks, autant parce que je n’étais pas satisfait de certaines icônes que pour rectifier une erreur vieille de 15 ans : on ne peut utiliser que 50 icônes de gemmes et les haks d’Althea en comportent 65. Comme je devais en introduire de nouvelles pour le minage, j’étais face à un problème.
Je l’ai résolu à la naine. Soit au bâton de dynamite.

Le code des quêtes dynamiques a été adapté, grâce à la participation de Maxime, pour fonctionner en groupe, ce qui n’était pas de la petite bière !
Il me reste une incertitude, il semble que lorsque des joueurs rejoignent une partie où existe déjà un groupe, les résultats du code permettant d’identifier les membres de ce groupe soient incertains.
Incertain est un mot très prisé des informaticiens. Quantiques, évidemment.
J’ai donc inclus du code de debugging dans les logs. Si le souci persiste, je devrai une fois de plus recourir aux grands moyens. C’est à dire que je n’ai aucune idée de comment je vais faire mais que dans tous les cas ce ne sera pas propre.

L’artisanat est terminé et testé. S’il reste des bugs, ils sont bien cachés, espérons que non.

Bon, à cause de ces pertes de temps, je n’ai pas pu m’occuper de mettre la dernière main au minage. Mais ça vient !
J’ai pratiquement tout terminé maintenant, j’ai même trouvé le temps de monter un guerrier niveau 5 hier, je suis à un niveau de mon record depuis mars !

19 juillet 2018

Dernier jour de développement de l’artisanat, tout s’est fort bien mis en place et je suis très bien aidé par mes chasseurs de bugs préférés 🙂
Il reste des bugs liés au passage d’objets uniques à objets empilables, mais dans l’ensemble tout m’a l’air stable et, d’un point de vue serveur, moins gourmand en ressources puisque je peux à présent créer n’importe quel objet à activation sans que le code n’aille se perdre dans le fatras du mod_onactivate. Tout cela est franchement mieux, tant vu de l’extérieur que de l’intérieur, et les systèmes présentent des possibilités d’évolution intéressantes.

Dès que tout est débuggé, je programme les événements pour les mineurs et les quêtes de stabilisation des objets myrdiens.

Un nouveau type de donjon aléatoire fera également son apparition sur le modèle de la quête de l’esprit et de celle des druides. Il sera possible de rentrer dans des tombes myrdiennes découvertes au hasard des périgrinations et de faire main-basse sur des objets anciens.

18 juillet 2018

Assoupli les restrictions d’équipement d’objets magiques puisque l’artisanat peut à présent ajouter des propriétés qui valent leur pesant d’or. Il est probable que ces restrictions ne seront toujours pas adaptées, à voir à l’usage.

Terminé l’ajout de propriétés magiques sur les objets d’artisanat. La mécanique est en place mais pour l’instant je reste dans le basique : j’augmente le bonus d’AC des armures, le bonus d’attaque des armes à distance et le bonus d’altération des armes de mêlée. Tout est en place pour en faire plus, plus tard s’il échet, mais le code actuel se contente d’un wrapper {} à de nombreux endroits.

L’assemblage, la forge et l’alchimie laissent à présent le produit du travail dans leur conteneur, il faudra le transférer manuellement dans l’inventaire si on souhaite le garder. Ceci dans l’optique de ne pas devoir perdre du temps à bourrer le conteneur des productions inutiles, bandages, potions et autres robes pour les éliminer par le craft suivant. Qui plus est, c’est plus logique.

J’ai également introduit l’eau et le tissu en piles pour éviter l’éparpillement dans l’inventaire. Pareil pour les racines de mandragore. Il faut acheter un mélangeur à l’alchimiste pour provoquer la réaction des composants, le système, et tous les systèmes en général, ont gagné en fluidité et variété. Visiter l’alchimiste permet d’acheter les deux nouveaux objets, le mélangeur pour déclencher les réactions (que tout le monde en interne appelle “la touillette”) et le stabilisateur, un réactif puissant pour stabiliser un mélange devenu instable qui va provoquer des dégâts jusqu’à tuer l’alchimiste s’il n’est pas utilisé à temps.

J’ai également ajouté des effects visuels lors de la réussite de fabrication d’objets plus puissants que du +1.

Ceci sera un module à hauts risques, j’ai modifié énormément de choses.

17 juillet 2018

J’ai modifié la courbe de gain d’expérience de manière à éviter le farm de quêtes de newbies pour progresser jusqu’au niveau 40.

J’attaque à présent la refonte de l’artisanat, je passe en sous-marin le temps qu’il faudra.
Adieu ! Je vous aimais bien !

P.S.: Ben en fait non, je ne vais rien changer du tout. Le système existe et a démontré sa stabilité, je vais donc ajouter des éléments au système plutôt que le refondre.
Les pistes qui me séduisent le plus sont :
– Ajout aléatoire de propriétés
– Modification d’un objet existant par refonte en ajoutant un élément myrdien, puisqu’ils sont centraux dans cet univers
– Modification aléatoire des propriétés de base d’un objet
– Amélioration des propriétés de base en fonction du niveau de l’artisan (ce qui m’impose d’augmenter l’expérience obtenue pour l’artisanat de manière à garder viable l’option d’artisans purs sans compétence de combat).
– Si tu as une idée, le forum te tend les bras !

Je supprime l’idée de publier des modifications par le dossier ‘override’, cela ne génère que des problèmes, je vais donc procéder par un système de deux hakpaks, myrda de base et myrda de dev, comme ça personne ne pourra se connecter avec de vieux fait chier. Euh… fichiers.

16 juillet 2018

Ah! le bug de DestroyCampaignDatabase qui m’a empoisonné la vie depuis si longtemps sera réglé dans le prochain patch, je viens d’avoir la confirmation par Virusman.

15 juillet 2018

Amélioré le contournement d’un vieux bug Bioware qui crée des objets avec des tags majuscules même si on a spécifié un tag égal au resref, soit en minuscules puisqu’on ne peut pas spécifier un resref majuscules. Voir il n’y a pas si longtemps ma diatribe au sujet du temps perdu à essuyer les bugs des autres. Soit, je ne peux pas enlever le bug mais je le contourne à présent plus efficacement.

J’entame la refonte du système de création d’objets d’artisanat.
C’est du gros mais je n’ai pas le choix.
La meilleure épée que l’on puisse créer est pour le moment une +5 pour un grand-maître forgeron.
En 2018 pour des joueurs niveau 40, c’est tout simplement risible, je dois revoir tout cela.

En urgence, j’ai adapté le code de forge pour utiliser des lingots empilables.

14 juillet 2018

La peur de ma vie hier soir : tous les objets magiques étaient cassés. Quoi que je fasse, même en partant d’un module vide sans hak pak, les objets magiques n’affichaient plus aucune propriété. Bien entendu, il fallait que cela corresponde avec la publication d’un nouveau patch, d’où panique monstre qu’ils aient fait quelque chose (qui en plus n’affecte que les modules en FR) qui me casse la baraque.
J’étais déjà sur le point de prendre ma hache et mon bouclier et de prendre le bateau pour aller leur montrer au Canada qu’on ne joue pas impunément avec les pieds d’un Belge au régime quand je me suis quand même résolu à chercher la cause du problème du côté de l’improbable et de l’impossible (donc, de là où viennent les emmerdements 99% du temps) et je me suis rendu compte qu’un fichier itemprops.2DA traînait dans mon dossier override, fils illégitime d’un test et d’une distraction, fichier tellement pourrave qu’il n’était même plus possible de l’ouvrir !
Donc, voilà, tout est en ordre.

Aujourd’hui j’ai modifié le minage et la forge. Le minerai et les lingots sont désormais empilables, pèsent moins lourd et s’enorgueillissent de nouvelles icônes que j’ai spécialement créées pour l’occasion.

J’ai rendu la progression minage/forge plus facile. Peut-être trop, rien ne dit que ça restera comme ça.

J’ai également modifié les routines d’enchantement par fragments d’essence pour donner systématiquement une augmentation de constitution qui était, je trouve le facteur le plus handicapant dans les premiers niveaux de jeu pour les classes fragiles qui ne compensent pas cette fragilité par leur puissance.

Les haks ont changé : myrda_01 fait place à myrda_02 et les override sont nouveaux. Les musiques ne changent pas et ne devraient plus changer avant longtemps.

13 juillet 2018

J’ai terminé les routines d’amélioration d’objets. Et oui, les objets d’artisanat seront améliorés aussi, l’époque a changé et le niveau 40 est ouvert.
Je suis en train de concevoir les quêtes nécessaires pour stabiliser les objets légendaires.

Reprise de mon post relatif au processus de transmutation myrdienne :

Bah ! tout ça c’est du caca, du déjà vu, je joue petit bras !

Back to the drawing board, tout est passé à la moulinette et voici à quoi va (pourrait ?) ressembler le nouveau système :

Quand on met un objet dans la machine gnomique avec un fragment d’essence myrdienne, le processus conservera les attributs de l’objet au lieu d’en attribuer de nouveaux au hasard. Ce qui ne marchait prodigieusement pas car perdre une épée +5 pour récupérer une latte +0 avec 80% de réduction de poids, utlravision, vision véritable, +16 en charisme et lumière blanche sur 400mètres, c’est sans doute légendaire mais surtout farfelu et inutile !

Donc, maintenant, l’objet imbu de l’essence myrdienne conserve ses propriétés de base, mais a une chance qu’elles soient transfigurées. La latte +5 pourrait aussi bien devenir une +20 si on a le bol de sortir une légendaire maxée, et j’ajoute une propriété cadeau ou l’autre.

Ah, là, tout de suite, on peut causer.
Oui mais ! ça fait quand même un peu Grosbill non ?
Bien sûr, je peux me le permettre puisque tous les objets ont une chance de casser dans notre univers, rien de déséquilibré n’existera indéfiniment, mais tout de même, quand ça cancanne comme un canard et que ça marche comme un canard, faut se rendre à l’évidence : c’est un canard.
Donc, c’est Grosbill.
Donc non, pas question.

“Allez quoi Tonton, soit sympa, qu’on rigole !”

Bon, allez, pour te faire plaisir, je veux bien.
Mais il y a un mais !

Si lors du processus de transfert d’essence la chance (ou la malchance, tu vas voir) veut que tu ailles choper un objet mythique ou légendaire, il faudra, pour stabiliser l’enchantement, sacrifier à quelques (menues) formalités.
Par exemple, aller plonger l’objet dans du sang de dragon encore frais, ou trouver le fantôme d’un mage myrdien qui moyennant désagréments acceptera de stabiliser l’objet, ou récolter autant de composants alchimiques nécessaires dans un temps imparti.
Tu vois l’idée ?

Monsieur et madame Zepower ont une fille et elle s’appelle Agathe !

12 juillet 2018

Enorme catastrophe hier, j’ai fini par me rendre compte que ma manière de contourner le bug qui empêche Linux de détruire une base de données (ce dont j’ai besoin pour éviter qu’elle ne grossissent exagérément) n’était d’aucune utilité. En effet, le crontab modifiait bien l’extension des fichiers ce qui me permettait de les détruire, mais pour une raison qui restera à jamais inconnue, le serveur était ensuite incapable de lire le contenu de ces bases. D’où une cascade de bugs, perte des points d’artisanat, perte de la banque, j’en passe et des meilleures.
J’ai perdu pas mal de temps à remonter à la source du bug et j’ai finalement dû aller rechercher le code que j’avais écrit avant que Beamdog ne réponde à mon rapport de bug, code que j’ai adapté pour qu’il fonctionne aussi pour la banque.

Beamdog a publié un nouveau code aujourd’hui, serveur et client, et le bug n’est pas réglé, ce sera pour le prochain patch. Ce n’est pas important si mon code se révèle robuste, nous pouvons attendre.

Les mages pourront désormais couper du bois en achetant la serpe à bois, pareille à la hache de bûcheron pour laquelle il n’ont pas la compétence. Nous n’allons quand même pas les obliger à payer un point de compétence juste pour pouvoir utiliser les hachettes.

J’ai passé le module en Beta, c’est peut-être optimiste mais il faut avancer !

11 juillet 2018

Fragments d’essence myrdienne: la guilde des inventeurs permet de sacrifier un objet pour tenter d’en obtenir un meilleur. Première mouture.

09 & 10 juillet 2018

Correction de bugs à la pelle, trop long pour être détaillé.
Les systèmes d’interaction PJs-PNJs a subi sa dernière évolution, le code est à présent figé et je n’aurai plus qu’à modifier le fichier chatter.2DA pour ajouter du contenu, bavardages, quêtes, indications ou félicitations. Tout cela tient en moins de 200 lignes de code et est, fort heureusement, abondamment commenté, parce que c’est du lourd !
La nécessité de re-downloader le dossier ‘override’ à chaque nouvelle version majeure du module est un inconvénient, mais sortir toutes les données du code vers des fichiers 2DA externes me permet de conserver un code très réduit et très efficace sur lequel je ne dois plus jamais revenir.
C’est d’ailleurs ainsi que NWN est construit, le jeu repose sur des dizaines de fichiers 2DA qui contiennent toute la partie variable du jeu.
Cela dit, il faudra que je me penche sur les effets de fichiers override différents sur le serveur et le client, à la limite, on s’en fout, à voir.

08 juillet 2018

Le module est en ligne et en tests !

07 juillet 2018

J’ai terminé le debugging de tous les systèmes d’interaction, les éliminer tous m’a pris deux jours, surtout parce que tout ce travail a mis en lumière des bugs anciens que j’ai corrigés au passage.
Je me demande comment tout cela va se traduire en plaisir de jouer, j’espère que ce travail n’aura pas été inutile, parce que c’est juste énorme tout ce qui se passe à travers des systèmes multiples interdépendants. Mon inquiétude est qu’en groupe cela devienne vite la foire avec des salutations dans un coin, des événements dynamiques qui poppent à la figure des joueurs, le tout pendant qu’ils sont en train d’écouter deux conversations aussi différentes qu’indispensables, etc.

J’aurai fait ce que je pouvais, qui vivra verra !
Me reste à compléter quelques fichiers 2DA avec les quêtes et interactions déjà existantes et j’aurai fini.
Fini voulant dire, en l’espèce, que je pourrai commencer.
Comprenne qui pourra.

06 juillet 2018

Félicitations à nos amis Français pour leur qualification en demi-finales de la Coupe du Monde, elle était méritée ! C’est con, je dormais au moment du premier but, 35km en forêt, trouvé une nouvelle côte à faire se retourner le vélo, pas pu résister, donc un peu fatigué. Mais beau match à part les simagrées de Mbapé !

J’ai terminé le système d’interactions entre PJs et environnement, je peaufine. La seule chose qui m’inquiète est la pointe de lag importante qui survient quand le système va rechercher dans les fichiers de quête l’interaction la plus pertinente à proposer ; cela induit un freeze d’une seconde, mais pas dans tous les cas et je ne l’ai pas encore testé sur le serveur Linux, ça devrait aller mieux.
Tout se met gentiment en place, je dois encore résoudre le problème des PNJs qui lancent l’interaction alors qu’ils ne sont pas les plus proches du PJ, j’aurai fini cela aujourd’hui et je vais pouvoir lancer un module de test.

Dès que le module Myrda passera en beta, le module Althea sera déconnecté définitivement. J’ai bien réfléchi, c’est ce qu’il y a de mieux à faire.

05 juillet 2018

Dernière ligne droite.

Je mets la dernière mains aux routines d’interaction PNJs-PJs, ce qui pourrait être terminé aujourd’hui ou prendre un peu plus de temps si les bugs sont trop lourds. Tous les systèmes sont indépendants les uns des autres et se chevauchent dans leurs effets, j’avoue sans rougir avoir été poussé dans mes derniers retranchements pour finaliser ce projet.
Pour résumer, voici les nouveautés par rapport à Althéa :

Toutes les portes mènent quelque part, par défaut sur des scènes de la vie quotidienne.
Lorsqu’un joueur passe à proximité d’une porte, il est possible qu’un habitant en sorte pour l’interpeller. Pour mettre fin à un cambriolage en cours, éteindre un incendie, espionner une confrérie secrète, explorer un passage révélé par des travaux, etc.
Lorsqu’un joueur arrive à proximité d’un PNJ, en ville, à la campagne ou dans une taverne, les PNJs pourront adresser des félicitations aux joueur pour leurs hauts-faits.
Les PNJs, dès qu’ils sont plusieurs, peuvent converser de sujet aussi triviaux que l’infidélité de la boulangère ou plus intéressants comme les événements de l’univers qui surviennent à proximité et auxquels les joueurs peuvent participer. Ces conversations pourront apprendre beaucoup aux joueurs sur l’univers et ses protagonistes principaux.
Les informations obtenues pas les joueurs ne seront pas toujours directement exploitables et seront des étapes dans des enquêtes plus vastes dont les indices seront délivrés au fil des aventures pour générer des puzzles de grande envergure.

J’ai quand même un peu les jetons. C’est gros. Et si tout fonctionne de manière satisfaisante, je devrai encore travailler pour rendre les événements indépendants du code, modifier un seul fichier 2DA externe étant tout ce qui est nécessaire pour développer l’histoire. Mais ça, c’est pour plus tard, j’ai bien droit aussi à quelques vacances, je travaille tous les jours sur ce projet depuis plus de deux mois, c’est excitant, mais aussi assez usant.

Je vais d’urgence modifier le paradigme de loot, je n’aime pas celui d’Althea qui donne systématiquement les mêmes objets pris dans la production artisanale (que je vais aussi devoir revoir).
A présent, le loot sera créé selon ces modalités, encore en cours d’évaluation :

1 Nombre d’objets 1 de 1 à 5; 2 de 2 à 9; 3 de 6 à 19; 4 de 15 à 30; 5 de 20 à 40
2 Nombre de propriétés par objet 1 de 1 à 12; 2 de 6 à 16; 3 de 9 à 25; 4 de 23 à 40; 5 de 35 à 40
3 Puissance des propriétés Même principe

Comme les objets de l’univers peuvent se briser, je peux prendre le risque de créer un objet légendaire qui aurait, par exemple, +20 toucher, +20 dégâts, +10 vampirique, + 10 régénération, et, soyons fou, 80% de résistance à la magie. Comme ce type d’objet brillerait comme un miroir de bordel lors du test de probabilité de casser, j’envisage de pouvoir renforcer un objet pour lui éviter une ou deux casses. Ce qui coûtera un bras, bien évidemment.

C’est tout pour aujourd’hui.

04 juillet 2018

Joyeuse fête nationale à nos amis américains. Y en a pas ? Et alors, ça n’empêche pas d’être urbain !

Bon, les musiques, c’est caca. Elle est où la poulette ?
J’ai bien refait le ambientmusic.2DA tout comme il faut, ajoutant dans la colonne Stinger2 à l’évidence inutilisée, une matrice de bits censée me permettre de rendre les musiques dynamiques. Le hic, c’est que je ne vois pas très bien où ça me mène, mais, pour référence future, ces informations sont :

Combat Dynamique Rêverie Jour Nuit Taverne Ville Campagne Donjon Magique Religion

Ca peut toujours servir si je mets réellement en fonction un jour un système dynamique.
Pour le moment, je préfère choisir la musique d’une zone une fois pour toutes, voire n’en mettre aucune parce que tout le temps les même musiques, ça énerve, et balancer des musiques spéciales à la fin des donjons qui le méritent.
Attendez-vous à la musique de Signé Furax à la fin du Vienzyvwar !
Des figues, des bananes, des noix !

Bon, je m’attaque aux conversations de PNJs d’ambiance, source d’informations pour les PJs.
C’est un gros morceau, je me demande si je n’ai pas repoussé l’échéance autant que j’ai pu…

03 juillet 2018

Ah ! Décidément certaines choses ne changent pas. J’ai commencé à éponger les bugs des autres en 1989 quand je suis devenu développeur officiel Apple. A cette époque, nous n’avions pas l’Internet (si ! y a des gens qui ont connu un monde sans Internet, tu arrêtes de ricaner et tu sors !) et je communiquais avec les ingénieurs d’Apple par modem 9600 bauds (soit 1,2 kilobytes/seconde, tout de même, ce qui ne prendrait jamais que 700 heures pour transférer un film HD de 3Go…). Tous les logiciels Apple étaient alors développés en Object Pascal (excellent language au demeurant, très propre, extrêmement facile à maintenir, c’est pour cela qu’ils l’ont abandonné pour choisir le C#, qui fait la même chose mais est tellement plus facile à saloper) et il m’est arrivé de perdre des dizaines d’heures, si pas des centaines, pour débusquer un bug coton du genre qui se produit une fois sur 1000 uniquement pour me rendre compte qu’il venait d’Apple, made in USA Baby! Penses-tu qu’avec tout ce travail fourni pour ce ramassis d’ingrats les indépendants auraient eu droit ne serait-ce qu’à une remise de 50% sur le matosse ? Que dalle ! Fallait même payer sa bouffe et son hôtel pour assister aux grand-messes (difficile d’appeler autrement les séances de bourrage de mou qu’étaient les Apple Developper Conferences). Vingt-cinq ans plus tard, ils n’ont pas fini de prendre les gens pour des cons et ça marche toujours, dis-donc !

Tout au long de ma carrière, les mêmes causes ont produit les mêmes effets : des mecs qui programment comme des cochons et qui s’imaginent que plus c’est dégueulasse plus c’est pro. Le summum c’est quand je suis passé sur Unix, là tu peux dire qu’on en voit des sérieux, de ceux qui t’affichent voluptueusement leurs rangées de dents cariées en te montrant un fragment de code de vingt lignes où aucun mot ne dépasse trois caractères, noyés dans une bouillie infecte de caractères spéciaux empipés les uns dans les autres. Les mêmes mecs qui pourrissent les forums Linux à répondre des âneries dans tous les sens sur tous les fils uniquement pour se faire contredire par le rat de salle machine suivant, aussitôt contredit lui-même par un autre zozo, tout ce petit monde perdant joyeusement un temps fou, le leur et celui de la pauvre pomme (moi) qui cherche juste un segment de code qui fonctionne à peu près.

Bon, bref, j’aurais voulu cacher plus longtemps que je ne supporte pas les gens qui se font appeler informaticiens parce qu’ils ont soit un diplôme soit de l’enthousiasme, mais c’est raté. Note qu’il y a des gens bien partout, même si la plupart ne valent pas le prix du clavier pour leur bouziller la tronche.
Soit, j’en viens au fait : j’ai perdu un temps bête pour contourner le bug de DeleteCampaignDatabase présent dans le code serveur Linux de Bioware. J’avais rempli un bug report et 28 jours plus tard aucun développeur de Beamdog n’avait encore daigné se pencher dessus.
C’est chose faite ! Un de leurs ingénieurs m’a informé (sans trembler des genoux) que le code Linux crée les fichiers de bases de données avec des extensions en minuscules (.dbf, .cdx, .fpt donc) mais que ce même code exige que ces mêmes extensions soient en majuscules pour détruire les fichiers qu’il a lui-même créés. Tu t’imagines depuis combien d’années ce bug dort peinard au fond de leur code !

Du coup, je dézingue tout le système que j’avais programmé pour contourner le bug et en attendant le prochain patch j’ajoute à mon cron de backup quotidien :
cd ‘~/.local/share/Neverwinter Nights/database’
rename “s/\.dbf$/.DBF/” *.dbf
rename “s/\.fpt$/.FPT/” *.fpt
rename “s/\.cdx$/.CDX/” *.cdx
Comme ça, une fois par jour, les fichiers peuvent être détruits pour repartir dégraissés, tout beaux, tout neufs.

Au niveau production du module, j’ai travaillé sur les musiques, bien décevantes je dois le dire, le son du hautbois synthétique est particulièrement rébarbatif. Je ne sais finalement pas si je vais faire usage de ce hak de musiques, je prendrai cette décision aujourd’hui. C’est la dernière chose à faire, je reprends les tests après ça.

02 juillet 2018

Terminé le placement des objets que l’on peut emporter en donjon pour les placer dans sa maison. J’ai ajouté un faisceau de lumière bleue sous l’objet pour mieux indiquer qu’il peut être emporté, sans quoi certains sont tellement intégrés au décor qu’ils passent inaperçus et le but n’est pas de faire se promener le joueur dans le donjon à cliquer sur tous les meubles !

Terminé les emplacements de cartes au trésor. Althea proposait une série de cartes contiguës pour rechercher les trésors ; cartes désespérément vides donc. J’ai préféré disséminer les emplacements de trésor partout dans l’univers et donner des indications significatives sur la carte pour les retrouver, ce qui évite ces zones vides un peu inutiles.

J’attaque le classement des musiques de manière à concrétiser le jukebox et le système de musiques aléatoires dans les différentes zones. Après cela je devrai introduire le background de l’univers à la mémoire du Monde et j’aurai terminé tout ce que je comptais faire avant la beta.

01 juillet 2018

Dure journée ! Aujourd’hui avait lieu la traditionnelle Francorchampionne, randonnée VTT aux alentours du circuit de Spa-Francorchamps dans les Ardennes belges. Mon fils voulait parcourir les 35km avec Papa, le hic c’est qu’un dénivelé de 915m était annoncé. Et ça a fait mal, très mal. Pas trop pour lui, il a 14 ans le bougre, mais à 56 balais, relativement peu entraîné cette saison, j’ai quand même laissé de ma superbe dans la poussière.
Enfin, nous avons bouclé nos parcours, tous les trois avec ma femme.

Du coup, je vais jeter un oeil aux cartes au trésor ce soir si seulement j’en trouve l’énergie, j’ai vraiment mal partout là…

30 juin 2018

J’ai trouvé un bug dans mes routines de bases de données, on dirait que tout fonctionne correctement à présent. Tout ça parce que DestroyCampaignObject ne fonctionne pas sur Linux, je suis donc contraint, pour éviter l’inflation infinie des bases où les records ne sont jamais détruits mais plutôt marqués détruits, de créer de nouveaux fichiers chaque mois de jeu. Avec un peu de chance je ne devrai plus y revenir.
J’ai remis en service le serveur Linux de secours pour faire des tests NWNX dessus, même si NWNX ne fonctionne pas sous Windows et me rendrait le développement plus difficile – j’ai autre chose à faire que perdre du temps avec des outils !-, et je me suis rendu compte que le serveur dégageait une drôle d’odeur : le ventilateur de l’alimentation est mort. Bon, je pourrais changer le ventilo, ou changer l’alim, mais ça fait encore des frais et du temps perdu, donc je mise tout sur l’implémentation actuelle des bases de données et ne compte pas aller plus avant avec NWNX sauf si les conditions devaient changer.
Je dois quand même remettre en état le serveur de secours, cela dit…

A partir d’aujourd’hui je parcours ma todo list pour faire en sorte que le module soit terminé dans les jours qui viennent.
Je travaille actuellement à replacer les meubles rares dans l’univers. Fastidieux…

29 juin 2018

Maintenance serveur pour installer le ventirad. Les résultats sont à la hauteur des espérances, chaque coeur ne dépasse plus les 25°, soit la température de la cave.
A voir lorsque je débriderai le serveur. Confiant.

Debugging incrémentation bases de données en cours. Ca doit être une connerie mais ça bouffe du temps et de l’énergie. Je suis vraiment en train d’hésiter à tout repasser sur NWNX, mais je n’ai pas le temps (et ça me fout les jetons).

28 juin 2018

Debugging dernière quête dynamique pratiquement terminé, j’ai rencontré des problèmes à cause de PNJs qui passent une porte sans qu’on leur ait rien demandé et qui, du coup, rendent inopérant leur système de déplacement par coordonnées. Le problème est identifié et cerné, mais le fix n’est pas propre. Mais alors, pas propre du tout ! M’enfin, c’est un fix, si je devais aller au fond des choses pour tout j’y serais toujours l’année prochaine. Note que j’y serai toujours l’année prochaine, mais sur autre chose !

27 juin 2018

Je viens de commander un nouveau ventirad pour le serveur, je n’aime pas le voir caracoler vers les 75°C, il devrait gagner près d’une vingtaine de degrés dans l’aventure.

J’ai presque terminé la dernière quête dynamique d’habitations je dois choisir quoi faire ensuite, de :
– monter le paladin niveau 10 pour voir évaluer l’expérience de jeu à bas niveau
– débugger les bases de données qui n’ont pas encore le comportement que je souhaite
– remettre en jeu les rares de décoration
– remettre en jeu les cartes au trésor
– retravailler la mémoire du monde avec introduction du background

Je verrai bien, mais je crois que l’essentiel, c’est les bases de données.

Une idée m’est venue aujourd’hui en écrivant un SetEventScript pour les cultistes de Baltus: il est réalisable de construire soi-même l’intelligence artificielle de PNJs pour en faire les soldats que l’on veut pour défendre sa forteresse, ou aller poutrer le voisin.

26 juin 2018

Déjà deux mois que j’ai repris le projet. Sans plus avoir touché le moindre outil de programmation depuis quinze ans, c’était chaud !
Là, je me suis bien remis dans le bain, les réflexes sont revenus, les outils sont excellents, pas un seul crash serveur depuis la mise en service, le seul souci est le temps.
La beta va ouvrir bientôt, la fin du tunnel est proche, et les outils dont je dispose sont au top surtout avec mon nouvel i7. Mais le temps manque.
Mettre un projet pareil sur les rails, c’est juste énorme.
Il ne s’agit pas de causer, là, de faire des réunions, de serrer des mains et de faire semblant d’être utile.
Faut produire !
Et quand ça plante, y a pas d’excuses, le bonhomme est facile à désigner, il n’y a qu’à pointer du doigt !

Bon, dans un premier temps, ce ne sera pas parfait, le module ne sera pas à la moitié de ce que je souhaite, le site web est risible (mais fonctionnel, pas de temps perdu en chichis !) et je ne pourrai pas humainement avoir pu tout tester avant l’ouverture.
Qu’importe, au fil des semaines tout va se remettre en place et je vais pouvoir lancer l’histoire maîtresse dont je jette déjà des bases dans les quêtes de novice.

Je pourrai dire que le module sera opérationnel quand je pourrai me permettre de ressortir 3DSMax et de recommencer à créer des modèles. Là, on sera à nouveau dans la routine !
Le chemin est encore long.
Tant mieux !

25 juin 2018

Installation d’un SSD debranded dans la machine de ma femme = une demi-journée de perdue, aucun logiciel de transfert de système gratuit n’a justifié un bon vieux re-install Windows 8, tout beau, tout propre et au passage la mise sur orbite de tous les bookmarks Firefox de ma femme, qui ne fait pas de backups et ne se connecte pas sur le Firefox Sync. Comme prévu, après la réinstallation d’une tétrachiée de drivers et de logiciels divers et une machine deux fois plus rapide, y a pas mes jeux, y plus mes bookmarks, mon wallpaper est trop grand, tirage de gueule et pas un merci. Mon père m’avait prévenu.

Bon, c’est pas tout ça, j’ai terminé deux quêtes dynamiques. Il reste du boulot et je commence à fatiguer. C’est complexe, énormément d’implications indépendantes, j’ai mis au point des systèmes puissants qui seront très utiles, mais j’en ai marre, j’ai envie de monter mon paladin et d’aller tester toutes les zones du jeu.

24 juin 2018

Tous les systèmes sont en place et opérationnels, je scripte les quêtes. Peu de temps aujourd’hui pour cause de visite au 4ème Génie d’Amay. Sympa la ballade en bateau de combat, j’ai failli me retrouver à la Meuse. Enfin, à partir du moment où le pilote trouvait fun de rentrer en collision avec le bateau de ses petits camarades, il fallait s’attendre à tout ! Rien de tel que les plaisirs simples.

23 juin 2018

En fait je n’aime vraiment pas utiliser les PNJs d’ambiance pour lancer les quêtes, ça me chipote depuis un petit temps. Il arrivera que le joueur soit en campagne et ne rentre pas en ville ; il ne croisera donc pas de PNJ, mais par contre ne se trouvera pas très loin de bâtiments. En plus, le PNJ qui sort par une porte a un meilleur effet scénique que celui qui glandouillait sur la place et soudain se retourne vers le joueur. Je lance donc un événement sur le joueur quand il rentre dans une zone avec des DYNA_DOOR, et dès qu’il s’approche à moins de 35 mètres de l’une de ces portes, je lance la cinématique.

Pour le moment, les quêtes que j’introduis sont : cambriolage en cours, incendie, passage secret vers catacombes découvert lors de travaux et toute idée qui me viendra, c’est déjà pas mal pour mettre le système en route.

Je dois finir tout cela le plus vite possible pour reprendre le testing avec mon paladin.

inc_peuplement a été assez profondément modifié pour tenir compte des nouvelles fonctionnalités de personnalisation des PNJs. RandomizeNPC est une nouvelle fonction qui permet de changer l’apparence/race d’un PNJ créé même hors du système de peuplement.

22 juin 2018

J’ai commencé le scripting des quêtes Lagardère. Oui, euh.. référence ancienne… “Si tu ne vas pas à Lagardère, Lagardère ira-t-à-toi”, pataquès fameux, utilisé ici pour exprimer que c’est la quête qui va au joueur et pas le joueur qui va à la quête. Oui, ça marche aussi avec Chuck Norris.
J’ai finalement retenu le principe des PNJs d’ambiance qui, en priorité sur les messages de félicitations, proposent les quêtes que le joueur n’a pas encore accomplies aussi bien que les quêtes aléatoires d’habitations.

J’ai rendu complètement aléatoires les apparences des PNJs, les répétitions se voyaient vraiment trop et l’immersion n’y était pas, je n’ai pas pu y couper.
Voici ce qui change :
– deux blueprints uniques, human001, mâle, et human002, femelle, à partir desquels toutes les races sont dérivées
– têtes différentes pour les hommes et pour les femmes, minimum 10 pour certaines races, maximum 30 pour les humains
– 175 couleurs de cheveux pour les femmes, 24 pour les hommes (qui étaient ridicules avec 175…)
– 10% de chances d’avoir un gros
– variance de taille de 30%
– 6 couleurs de peau
– 175 couleurs pour les tissus, cuir et métal
– Noms aléatoires.

21 juin 2018

J’ai augmenté le hakpak d’un petit truc tout con mais bien pratique : un hak qui permet de masquer la minimap pour ne pas que l’on voie les différents éléments de tileset disséminés sans relation les uns avec les autres, ce qui arrive forcément sur une carte qui inclut les différents parties/étages d’une maison. Il suffit de définir une zone plus haute que large d’une case pour que le hak prenne effet. Simple et efficace.
Cela va également me permettre d’utiliser les plaques de téléportation invisibles en donjon, ça fait toujours rire les petits et les grands, ça !

J’ai terminé le mapping des bâtiments type. On peut à présent ouvrir n’importe quelle porte, et à Syrthe ça en fait quand même près de 40, et pénétrer dans une habitation aléatoire, que je prends le parti de ne pas détruire quand les joueurs l’ont quittée, c’est plus réaliste.

Je n’ai plus qu’à scripter les différentes quêtes possible dans ces zones, ce n’est pas le plus compliqué. Le seul truc compliqué qu’il me reste à faire, c’est d’implémenter les mécanismes par lesquels les PNJs vont inciter les joueurs à rentrer dans ces maisons, et leur rappeler les quêtes qu’il leur reste à accomplir.

20 juin 2018

Le serveur web est sorti de DMZ. Ca n’a l’air de rien, comme ça, mais ça fait plus d’un an que mon NAS était en DMZ, exposé à tous les vents, parce que mon routeur ne conservait pas les tables de routage au reboot. Pour je ne sais quelle raison… ah si ! j’ai changé le routeur ! bon, soit, maintenant les tables de routage ne s’effacent plus au reboot et j’ai donc pu remettre le NAS au chaud derrière le firewall. Ce qui signifie que mes ports 21 et 22 sont maintenant uniquement accessibles en local et que je n’aurai plus de chinois ou de ruskof à venir me sniffer régulièrement.

J’ai presque terminé les zones dynamiques derrière les portes de la ville, ce qui va me permettre de lancer des quêtes aléatoires. J’ai malheureusement perdu un peu de temps hier à modifier les routines de la garde pour permettre aux PNJs d’utiliser ses points de passage pour la routine de NWN WalkWayPoints() qui s’est avérée buggée : les PNJs vont erratiquement d’un WP à un autre, faisant demi-tour plusieurs fois à intervalles irréguliers pour je ne sais quelle raison. Inutilisable, temps perdu, je devrai écrire mon propre code. Soit.

19 juin 2018

J’ai renoncé au système de récompenses par amélioration d’un objet déjà porté, remplacé par le spawn d’un coffre contenant une grande variété d’objets +1 qui se détruit dès que le joueur en a pris un. C’est plus simple et plus efficace.

Le système de félicitations est achevé. Les PNJs congratulent les joueurs qu’ils croisent après qu’ils aient accompli un fait notable. Je suis toujours en train de travailler à la deuxième partie du système, celle qui place sur le chemin des joueurs des PNJs qui leur communiquent les actions à accomplir. Aujourd’hui, je compte terminer le système d’ouverture de portes dynamiques et peut-être déjà quelques animations/donjons derrière ces portes. Je dois de manière urgente fournir assez de contenu pour amener les joueurs niveau 10.

18 juin 2018

Du très gros boulot en cours. Terminer les systèmse d’interaction entre joueurs et univers, système de récompenses par amélioration d’un objet déjà porté et création dynamique d’instances en ouvrant les portes qui se présentent et qui ne seront plus systématiquement verrouillées comme sur Althea mais bien des ouvertures vers des rencontres/donjons aléatoires.

Je mène les trois chantiers de front car les implications sont très nombreuses et je préfère ralentir la cadence de codage pour minimiser le risque d’emprunter une mauvaise voie, qui m’obligerait à défaire et refaire un système.

17 juin 2018

Toyota a enfin gagné Le Mans ! Ben il était temps, après 20 participations ! J’ai travaillé sur les PNJs, habits, couleur de peau, des tas de choses que je ne vais pas lister, ce serait trop long. Je progresse également dans la manière de cerner les interactions entre les joueurs et l’univers. Je crois que ce sera bien. Je n’en suis pas sûr parce que je ne l’ai jamais vu implémenté nulle part, et pourtant j’en ai vu des jeux !

Je continue à tester avec mon paladin, je me rends compte que les quêtes ne permettent pas de progresser à vitesse suffisante et que les monstres donnent des XPs dérisoires – et que de toutes façons c’est totalement contraire à ma conception des choses de farmer du mob pour pexer !

Tant de choses à faire !

16 juin 2018

J’ai replanté les arbres rares où on peut s’attendre à les trouver. Fin du travail sur la conversion des bases de données, c’est satisfaisant sans être parfait. Parfait – presque puisqu’il ne fonctionne pas sur Windows – ce serait NWNX, mais ce machin est un vrai foutoir, je m’en méfie comme de la peste, c’est une solution de dernier recours.

15 juin 2018

J’ai modifié le système NBDE pour tenir compte du bug qui empêche Linux de détruire un fichier de base de données par la commande DestroyCampaignDatabase. Ainsi, chaque flush, qui écrit toute la base sur disque d’un coup, fera désormais précéder le nom de fichier de l’année et du mois courants du jeu. Puisqu’il m’est impossible de nettoyer les records marqués deleted dans les bases, je créerai un fichier tout beau tout propre à chaque mois de jeu. Il me suffira d’écrire un petit script que je mettrai dans le crontab pour flinguer les fichiers obsolètes. Les machines d’aujourd’hui s’en foutent un peu de la taille des fichiers et aller chercher un record dans une base de 1Go est la même chose que dans une base de 1Ko mais je suis de la vieille école, quand c’est pas propre ça m’agace.

Cette technique a quand même un inconvénient : je suis obligé de forcer un flush de toutes les bases dès que je détecte que le mois change.
// Flush de toutes les bases de données si le mois a changé pour garantir des fichier DB propres
void FlushAllDatabases() {
int i=1;
for (i=1; i<=kDatabases; i++) {
DelayCommand(2.0*i, NBDE_FlushCampaignDatabase(GetLocalString(GetModule(), “date”)+leading_zero(i,2)));
}
}

L’autre inconvénient, c’est que les noms de fichiers ne veulent plus rien dire, mais cette procédure me garantit (pour autant que kDatabases soit bien mis à jour !) un Flush correct de toutes les bases sans rien oublier. C’est mod_onuserdef qui détermine quand changer les noms de fichiers
string sS=leading_zero(GetCalendarYear(), 4)+leading_zero(GetCalendarMonth(), 2);
if (sS!=GetLocalString(GetModule(), “date”)) {
SetLocalString(GetModule(), “date”, sS);
FlushAllDatabases(); }

C’est énormément de changements et ce n’est pas compatible avec Althea, je devrai donc au minimum copier et renommer le fichier des points d’artisanat lors de l’ouverture du module, en prévenant que les points gagnés sur un monde ne se reporteront pas sur l’autre.

J’ai également mis au point le système de narration/quêtes qui permettra d’obtenir les informations manquantes pour réaliser les quêtes complexes requérant de voyager partout dans le monde. Le premier élément se situe chez Dalamar si on lui parle de la tour derrière son laboratoire. Le fichier QR.2DA contient le détail de toutes les quêtes à étapes avec un mot d’explication pour chacune, ce qui me permettra, où qu’aille un PJ, de lui proposer des éléments de recherche pour compléter ses quêtes.

14 juin 2018

NWN:EE a introduit une nouvelle commande serveur, Clients Required To Disable CPU Sleep, pour désactiver le sleep 0.1 qui se trouve dans le code du serveur NWN. Ce sleep force le serveur a réduire sa consommation de cycles processeur, ce n’est que 10ms mais, je suppose, c’est 10ms entre l’exécution de chaque commande du serveur, ce qui pourrait éventuellement générer du lag. Avec la machine que nous avons comme serveur, je ne constate aucune différence avec ou sans le sleep mais je me demandais quelle serait l’incidence de désactiver ce paramètre sur la température des coeurs du CPU.

J’ai donc fait tourner 5 modules simultanément avec l’option Clients Required To Disable CPU Sleep à 0, soit à puissance maxi.

top – 07:06:30 up 9 days,  7:25,  6 users,  load average: 4,35, 3,31, 2,17
Tâches: 244 total,   6 en cours, 189 en veille,   0 arrêté,   1 zombie
%Cpu(s): 99,9 ut,  0,1 sy,  0,0 ni,  0,0 id,  0,0 wa,  0,0 hi,  0,0 si,  0,0 st
KiB Mem :  3858808 total,   464152 libr,   971804 util,  2422852 tamp/cache
KiB Éch:  2097148 total,  2097148 libr,        0 util.  2422560 dispo Mem

  PID UTIL.     PR  NI    VIRT    RES    SHR S  %CPU %MEM    TEMPS+ COM.
25738 thierry   20   0  173604  52892   6260 R  84,8  1,4  13:20.23 nwserver-lin+
26017 thierry   20   0  140216  19028   5132 R  83,5  0,5   0:30.10 nwserver-lin+
25934 thierry   20   0  140216  19004   5112 R  78,5  0,5   1:32.22 nwserver-lin+
25722 thierry   20   0  163260  42988   6208 R  77,2  1,1  14:46.78 nwserver-lin+
25750 thierry   20   0  140216  19252   5360 R  76,2  0,5  12:25.73 nwserver-lin+

Je n’ai consataté aucun lag sur les modules, avec le bon vieux test des familles des 50 dragons au gué de Soufflevent. Mais bon, ça chauffe un peu…

CPU FAN Speed:     1804 RPM  (min =  600 RPM, max = 7200 RPM)
CHASSIS FAN Speed:    0 RPM  (min =  600 RPM, max = 7200 RPM)
CPU Temperature:    +59.0°C  (high = +60.0°C, crit = +95.0°C)
MB Temperature:     +32.0°C  (high = +55.0°C, crit = +95.0°C)
Core 0:       +76.0°C  (high = +89.0°C, crit = +105.0°C)
Core 2:       +79.0°C  (high = +89.0°C, crit = +105.0°C)

Du coup, j’hésite. Dois-je faire l’impasse sur le paramètre Sleep puisque je ne rencontre aucun lag quoi que je fasse, ou bien dois-je acheter un nouveau ventirad – le serveur est toujours équipé de l’Intel livré avec l’i5, soit ce qui se fait de moins bon en matière de refroidissement – et faire tourner les modules à tout berzingue ?

Dans le même temps, faire tourner le serveur à tout casser en permanence, c’est sans doute rigolo mais ça consomme un max de courant donc, dans l’immédiat, je reste avec la valeur Clients Required To Disable CPU Sleep à 10, on verra plus tard.

Je teste le module Myrda avec un tout nouveau paladin niveau 1, modifiant au passage tout ce qui doit l’être. Je me donne 8 jours pour la phase alpha, après quoi je verrai si on peut passer en beta ou s’il est opportun de déjà entamer le dégraissage du module (nouveau système de création de créatures, nouveau système d’activation d’objets, destruction de tous les scripts/blueprints redondants ou inutiles, etc.). On en reparle dans une semaine.

13 juin 2018

Myrda passe en alpha fermée.

C’est maintenant que ça commence !

12 juin 2018

Le transfert des cartes avance à grands pas, et j’ai résolu plusieurs difficultés techniques, dans ma lancée d’hier.

D’abord, j’ai enfin réussi à rendre statique l’IP du serveur. J’ai renoncé à tenter de réaliser l’opération par le routeur BBox3 de Proximus qui refuse obstinément d’accorder des IP statiques quelle que soit la plage choisie. Je n’ai également pas touché à etc/network/interfaces sur le serveur car, comme beaucoup l’ignorent, ce fichier n’est plus utilisé depuis Ubuntu 17.1 et il convient à présent de passer par Netplan. C’est ce que j’ai fait et, après avoir désactivé l’IPv6, j’ai obtenu une IPv4 statique qui a l’air de tenir. C’est une toute petite chose, insignifiante, mais j’ai dû ingérer une quantité absurde de documentation erronée (puisque l’immense majorité des articles disponibles sur le net parlent toujours du ficher etc/network/interfaces et même de cartes réseau eth0 ce qui n’existe plus non plus depuis longtemps !). Je suis finalement passé par l’interface graphique Gnome qui a parfaitement rempli son office.

Enfin, j’ai installé un serveur TeamSpeak 3 sur le serveur. Il fonctionne parfaitement, les joueurs pourront s’y connecter à leur guise. Je m’y connecterai aussi souvent que possible. Reste le souci de l’accès par DDNS, il m’envoie aux fraises quand je spécifie l’adresse mirfak.ddns.net:9987 qui se résout pourtant correctement, je n’ai pas de temps à perdre avec ça pour le moment.

11 juin 2018

Depuis un petit temps je m’inquiétais de devoir utiliser la fonction ActivatePortal pour voyager entre les sous-serveurs à venir. Pour le moment, je n’ai qu’un seul module, mais le moment viendra où je devrai le tronçonner. Mon problème était que l’adresse fournie à ActivatePortal était soit une adresse internet (du type althea.ddns.net) empêchant l’accès au serveur depuis le réseau local, soit une adresse locale (du type 192.168.1.1xx) empêchant l’accès en-dehors du réseau local.

Je ne sais pas comment j’ai fait, mais en bidouillant des trucs (ce qui semble être la manière privilégiée d’apprendre leur métier pour les rats de salle machine), j’ai résolu le problème. Maintenant je passe une adresse dynamique à ActivatePortal et le joueur voyage instantanément entre les sous-serveurs qu’il soit dans le réseau local ou sur l’Internet. J’ai la vague impression qu’il aurait suffi de mapper les ports correctement dans le routeur (diriger tout le traffic 5121-5127 sur le serveur Linux) pour que tout fonctionne sans devoir modifier le etc/hosts, mais bon, ça marche, je ne vais pas essayer de comprendre comment !

1° Subscribe to a DDNS service. I use www.noip.com. Get a domain name, in my case mirfak.ddns.net
2° Open etc/hosts on the Linux server and add ‘192.168.1.xx mirfak.ddns.net’ to the file where xx is the static address of the server (which I haven’t figured out how to make static yet, my router DNS has issues, will look into that later).
3° Have the router refresh its address to the DDNS service automatically. If the router doesn’t provide that service, either use the Windows software provided by noip or install the noip2 packet on Linux and execute sudo noip2 -C to configure the service. I chose to let my router do the job, easier.
4° Get into the port mapping utility of the router and map 5121 to 5125 to the Linux server static IP
5° Script in NWN: “ActivatePortal(pj, “mirfak.ddns.net:5121”, “”, “”, TRUE);” replacing 5121 with whatever subserver you need portaling to.

10 juin 2018

J’ai terminé de reprendre toutes les zones qui figuraient sur la seule carte en ma possession. Reste quelques zones qui se trouvent du module d’août 2003 qui n’étaient pas sur ma carte. Ce sont des zones d’inspiration krynienne, dirait-on. Comme j’en ai ras-le-bol de reprendre des zones, je les intègre telles quelles juste après les avoir cartographiées, je n’ai plus la moindre idée de ce qui se passait dans ces zones, je ne dois pas les avoir pratiquées longtemps comme joueur et, comme je l’ai dit hier, je ne touche plus au groupe de 4 modules de 2013 avant un petit temps, je suis à saturation.

La priorité est maintenant de créer un perso et de tout tester, je ne fais plus de mage c’est vraiment trop faible en solo, ce sera un druide ou un guerrier. Ou un prêtre. Peut-être un moine. Bon, ok, aucune idée, c’est secondaire.

09 juin 2018

Bon, allez, il faut être honnête, j’ai touché mes limites. J’ai dit “touché” ! pas “dépassé” ! J’arrête la reprise de zones pour le moment, je n’en peux tout simplement plus, je travaille d’arrache-pied pour raccorder tout ce que j’ai déjà transféré dans le nouveau module, je fais fonctionner la seule quête de Krynn que je reprends pour le moment, et basta, je passe aux tests.

En fouillant dans mes vieilleries, j’ai remarqué que le module était passé de 10 à 20Mo de taille en sept mois, de janvier à août 2003. Si j’ai perdu des choses dans toutes mes opérations de transfert/remaniement, cela n’a aucune espèce d’importance, j’aurai aussi vite fait de les recréer, et au moins ce sera fun. Si un ancien à bonne mémoire me dit : “Merde, t’as flingué la quête de Machin dans la zone Bidule !” j’irai la rechercher. Rien que pour lui. Mais me farcir les dizaines de zones désespérément vides de Krynn dans l’espoir de retrouver un truc jouable, non merci, poubelle et on n’en parle plus.

Ah, j’ai failli oublier, j’ai réglé mon problème d’hier du nw_c2_default7 passé en mode alternatif, un coup il va un coup il va plus, aussi appelé mode sapin de Noël par les informaticiens poètes (ne ricane pas, j’en ai connu !). Bon, je ne saurais jamais comment je l’ai réglé, j’ai pédalé dans la choucroute pendant une demi-journée et au moment où je pensais avoir compris la cause du problème, je n’ai plus pu le reproduire. Donc, tout fonctionne normalement, cherche pas à comprendre.

Un beau petit bug aujourd’hui, je m’étonnais que la taverne de Syrthe ne spawne pas. Il se trouve que ce que j’ai écrit le 7 juin est totalement faux: GetObjectByTag ne rend pas d’office l’objet recherché à commencer par la zone courante ! Le comportement ne semble pas cohérent selon le type d’objet recherché. Dans le doute, je me vois forcé de rechercher tous les objets d’un même tag, comme avant, et de prendre le premier qui correspond à la zone. Le genre de truc à perdre des heures en recherches ça, je ne m’en sors pas trop mal à n’avoir perdu que quelques minutes dessus.

08 juin 2018

Je rencontre de multiples difficultés aussi inattendues que contrariantes. Premièrement, le module de 2003 comporte un assez grand nombre de zones qui ne figurent pas dans mon plan Excel et donc, au lieu d’être près d’avoir fini l’intégration, j’en suis encore assez loin. Un bon grand coup sur le museau, mais ce n’est pas ça qui va m’arrêter. Ca, c’est dit.

Ensuite, et c’est plus grave, les programmeurs de Beamdog ont encore frappé fort: tuer une créature rapporte à présent deux fois des XPs. Une fois par mon script nw_c2_default7 qui est censé remplacer la version défaut et une fois venant je ne sais d’où. Je répète : nw_c2_default7 est le script qui s’exécute à la mort d’une créature non-joueur et si je fournis ma propre version de ce script, la version de base ne doit pas s’exécuter, c’est le principe même de l’override dont il n’existe aucune interprétation possible en aucune circonstance. J’utilise nw_c2_default7 non seulement pour donner des XPs taillés sur mesure mais surtout pour que les créatures laissent tomber à leur mort des trésors personnalisés, des composants, et avancent certaines quêtes. Sans cela, je peux aussi bien remballer mes petites affaires et aller faire un tour à vélo.

Mais ce ne serait rien si ça ne devenait pas franchement comique : si je supprime ma propre version de nw_c2_default7, le joueur ne reçoit plus qu’une seule fois les XPs, c’est cool. Je re-programme un nouveau script nw_c2_default7 à partir de zéro pour remplacer celui du jeu et… mon script n’est plus pris en compte. Jamais. Seul s’exécute un script sur lequel je n’ai aucun contrôle, qui donne des XPs que je ne veux pas et qui ne fait rien de ce dont j’ai besoin. Je peux recompiler tout le bazar autant que je veux, mon script nw_c2_default7 qui s’exécutait avant le nw_c2_default7 (qui ne devrait pas s’exécuter, ça va, tu suis ?) ne s’exécute plus, quoi que je fasse.

Et chez Beamdog, c’est les abonnés absents. En bons informaticiens modernes, ils traitent les problèmes qui leur paraissent sexy et ignorent royalement les bugs fonctionnels qui empêchent les créateurs de travailler. En clair, ils appartiennent à cette génération de programmeurs que j’abhorre, obsédés par les outils et non par leur fonction. Raison pour laquelle j’avais plaqué Althea 2, soit dit en passant, ulcéré que pour faire mumuse avec un compilateur dont absolument personne n’avait besoin j’aie été privé par l’équipe technique des outils me permettant de travailler sur mes créations. Inutile de dire qu’aujourd’hui, j’en bave certes un max pour maîtriser tous les aspects d’Althea, depuis la conception de l’histoire jusque la gestion du serveur en passant par toutes les étapes intermédiaires dont le site web, mais je ne veux plus personne dans mes pattes pour me faire chier.

Je m’emporte et je deviens amer, je ferais mieux de retourner au travail. Non sans avoir transmis au passage un grand bonjour et un grand merci à TooLs, l’exception qui confirme la règle, qui s’est toujours montré du temps d’Althea 2 un designer inspiré autant qu’un excellent compagnon.

Bon, allez, j’y retourne, faut que je trouve une solution pour en sortir !

 

07 juin 2018

Pour le fun, voici une fonction que j’avais écrite il y a fort longtemps :

object GetAreaObject(string sS, object zone) {
int z = 0;
object oO = GetObjectByTag(sS);
while (GetIsObjectValid(oO)) {
if (GetArea(oO) == zone) return oO;
z++;
oO = GetObjectByTag(sS, z);
}
return OBJECT_INVALID;
}

Or, Aurora renvoie toujours les objets de la zone courante avant de passer aux suivantes, il eût donc été logique d’écrire :

object GetAreaObject(string sS, object zone) {
object oO = GetObjectByTag(sS);
return (GetIsObjectValid(oO) && GetArea(oO)==zone?oO:OBJECT_INVALID);
}

Je me demande si je ne vais pas faire une recherche globale dans le code sur les ‘while’ ou ‘GetObjectByTag’ pour détecter des boucles inutiles capables de mettre un serveur à genoux très rapidement ; peut-être la source des anciens crashs serveur, si fréquents, est-elle à chercher de ce côté.

Je n’ai plus que 13 zones d’extérieur à reprendre du module de 2003, ce qui devrait être assez rapide puisqu’il s’agit d’étendues enneigées que je ne devrai pas redessiner. Les zones de quête à reprendre sont plus nombreuses, mais c’est juste du copier-coller.

Quand tout cela sera fini, je devrai vérifier la pertinence de tous les livres de quête de la Mémoire et intégrer le background dans son dialogue. On avance !

06 juin 2018

C’est comique de retrouver des bugs vieux de 15 ans… La taverne du Grelot de Verglas n’a jamais eu droit à ses animations : le code d’activation comportait un bug idiot, c’est bien la preuve que trop de zones n’ajoute que du vide, personne ne me l’avait jamais fait observer.

Vertu inattendue du nouveau système de spawn mis au point le 28 mai : il est à présent possible, en ayant juste ajouté cette ligne de code:

SetObjectVisualTransform(oCreature, OBJECT_VISUAL_TRANSFORM_SCALE, 0.85+Random(31)/100);

de faire spawner des mobs un peu plus petits ou plus grands dans une fourchette de 30%, ce qui devrait ajouter de la variété. A pas cher il faut le dire !

Il me reste 16 zones à reprendre de l’ancien module et j’aurai terminé. Comme c’était surtout des zones de neige et que je trouve ces étendues gelées déprimantes, en plus que dans le nouvel univers la neige n’existe qu’au nord vers chez les Nains, je suis souvent obligé de redessiner une carte de campagne, ce qui prend du temps.

Ce nouveau monde comporte deux axes majeurs par rapport à la ville centrale, un au sud vers les Elfes et un à l’ouest vers les Nains. J’ajoute les zones soit vers le sud soit vers l’ouest pour essayer d’obtenir une bonne progressivité dans la difficulté, en essayant de concentrer le plus d’activités possible dans une même zone pour éviter les vides galactiques. C’est quand même un peu le stress vu que je ne peux rien tester avant d’avoir tout fini et de recommencer un perso. Je créerai un druide, ce n’est ni trop faible ni trop fort, je devrais pouvoir jouer en difficulté normale. Heureusement, le nouveau système de spawn me permet d’ajuster finement la difficulté d’une carte sans même devoir ouvrir l’éditeur, je n’ai qu’à modifier le 2DA des rencontres.

Je ne pourrai rien dévoiler des personnages centraux de l’univers avant d’avoir non seulement ré-intégré toutes les zones du module de 2003 mais aussi probablement celles des modules de 2013, ils feront donc partie du nouveau développement, ce qui n’est pas plus mal car je disposerai ainsi d’une solide fondation pour le développement futur.

05 juin 2018

Mise à jour du serveur en version 1.76. La mise à jour d’Aurora apporte une nouvelle fonction, SetObjectVisualTransform, qui permet de changer la taille de tous les objets dynamiques, créatures, meubles, etc. ainsi que leur orientation et inclinaison. Merveilleuses opportunités de développement en perspective.

La mise à jour a apporté son lot de contrariétés, plus moyen de lancer le jeu par un .bat windows, notamment ; du temps perdu, toujours du temps perdu, il faudra bien s’en accommoder, en espérant que ces bugs soient résolus au plus vite.

Je suis à la moitié du rapatriement des zones du module de base, on avance.

04 juin 2018

Le rapatriement des zones se poursuit, je mets le paquet pour terminer un module jouable, après quoi je rapatrierai les zones des modules qui ont tourné jusqu’en 2013 et enfin me mettrai à la programmation des systèmes encore manquants, quêtes dynamiques, instances de raid, système de réputation, etc. Ca se passe bien pour le moment, j’avance, jamais assez vite à mon goût, mais chaque jour reçoit sa charge de travail et le module évolue à vue d’oeil. Je dois absolument avoir terminé pour le 30 juin 2018 et ce sera fait. Les vacances seront consacrées au testing en famille et normalement, à la rentrée, je recontacterai tous les anciens dont Dominique a conservé précieusement les coordonnées, c’est émouvant de voir ces dizaines de lettres expédiées par tous ces joueurs qui ont fait d’Althea ce qu’il est, nous espérons bien les revoir.

Au passage, j’ai acheté pour le développement une machine puissante avec la technologie Intel de l’hyperthreading, ce qui signifie en gros, si j’ai bien tout compris, que le processeur s’overclocke tout seul. Et ça marche ! Pour le moment, j’ai Aurora qui tourne, un serveur en tâche de fond, un Excel pour les cartes de zones et de nombreuses applications annexes pour éditer les 2DA, contrôler par console le serveur Linux, éditer les spawns, etc. et la bête tourne à 4.35 GHz sur ses 6 coeurs. Pas mal !

03 juin 2018

Le nouveau serveur est opérationnel. Bon, pour une raison qui restera à jamais inconnue, il a bouffé les bases de données, j’ai dû tout ré-initialiser. Réparation manuelle pour ceux qui en feront la demande sur le forum, je sais à peu près où se situent les uns et les autres vu que nous ne sommes pas encore bien nombreux (définition de l’euphémisme, en quelque sorte). Ce souci mis à part, le serveur est très performant. Il pourra encaisser absolument tout ce que j’ai en tête de vicieux pour lui. C’est une machine un peu sur-dimensionnée pour un serveur NWN, et j’ai encore l’ancien serveur qui cherche partout dans la cave une prise de courant pour reprendre du service, ce qui porte la puissance totale du parc à 6 coeurs et 6Go de RAM. Si seulement on avait eu ça à la grande époque ! Depuis que je l’ai remis en service, le serveur n’a pas planté une seule fois, et ce n’est pas faute d’essayer !

En parlant de bases de données, je dois revoir mes plans, le système NBDE sur lequel j’ai tout reconstruit… ne fonctionne pas sous Linux, pour la simple raison que la commande DestroyCampaignDatabase, qui est pourtant une instruction de base d’Aurora, ne détruit pas la base ; elle est simplement sans effet. Probablement parce que tout le monde utilise NWNX sous Linux et que personne ne s’en est jamais soucié. Pour le moment, je m’en moque, tout fonctionne très bien, j’aviserai quand le module sera terminé quelle base de données utiliser, j’ai déjà ma petite idée. Et ce sera peut-être NWNX, rien n’est décidé.

02 juin 2018

Nouveau serveur. Un i5 quadruple coeur rejoint le dual core qui hébergeait le serveur jusqu’ici. J’ai battu tous mes records : il m’a fallu moins de deux heures pour monter la machine, installer Linux, installer le serveur et tout configurer. Il n’est pas encore en service, ce sera pour la semaine prochaine.

Je repars sur la conversion des zones, je suis un peu moins désespéré que la semaine prochaine, non pas que je voie la fin du tunnel, mais, simplement, je soupçonne qu’elle existe. On se motive comme on peut.

Mon nouveau PC m’y aide un peu, c’est un avion (électrique l’avion, vu le ventilo que j’ai mis dessus, on ne sais même plus dire où est la boîte !).

01 juin 2018

Toutes les zones autour de la ville sont terminées, je ré-intègre progressivement les zones de quêtes qui en valent la peine, dégraissant autant que je le peux les zones obsolètes. L’objectif est de placer autant d’activités que possible sur une même carte pour éliminer les espaces désespérément vides d’Althea. La difficulté est de regrouper des activités de même niveau au même endroit et d’introduire une progression logique dans la difficulté des zones.

C’est, franchement, un travail épouvantable puisque je suis obligé de manipuler des zones dont je ne connais plus rien ! C’est un travail à l’aveugle, harassant.

Je travaille avec trois machines. La première affiche l’ancien module ; dès que je choisis une zone à reprendre, je l’exporte sur mon NAS puis je la détruis. Ensuite, je l’importe du NAS sur la deuxième machine et la connecte au nouveau module. La troisième machine fait tourner le module Althea classique qui me permet de me déplacer en DM pour aller visiter plus rapidement les zones que je dois explorer.

Les cartes graphiques de mes PCs sont de bonne qualité mais je suis un peu juste en puissance CPU sur une partie de mon parc, je vais donc monter un nouveau i5-8600K dès que possible, je ferais bien cela ce week-end, j’ai juste la trouille de devoir passer un temps fou à désosser les PCs que j’upgrade et les remonter correctement dans leurs nouveaux boîtiers, je déteste tout ce qui est technique. Et pourtant, je suis les mains dedans à longueur de journée et c’est pas fini !

Un petit inconvénient résolu : je suis obligé d’ouvrir le fichier ‘triggers.2da’ avec Notepad ++ et de le convertir en ANSI avant qu’il ne soit utilisable par le jeu, puis de le re-convertir en UDF-8 pour que 2DA/TLK Editor puisse le lire sans exploser tous les accents.

31 mai 2018

Abandon de Mediafire comme hébergeur des fichiers de contenu additionnel du module. De nouveaux boutons les téléchargent à présent directement depuis mon NAS.

Révision globale du site tant que j’y étais.

Nouveau système d’information des joueurs. Le module comportait déjà des indications que le joueur recevait en marchant sur un déclencheur ; c’est l’équivalent des informations que donne un maître de jeu en chair et en os pendant une partie papier-crayon du genre “Tu vois des traces de pas récentes se diriger vers la tenture qui pourrait bien cacher une porte secrète *gros clin d’oeil discret*”. Je déplace tous ces textes vers un fichier ‘triggers.2da’ ce qui me donnera plus de souplesse car je dispose d’autant de colonnes que je le souhaite pour les étapes éventuelles d’une quête. En outre, cela me facilite l’éventuel travail de localisation si je devais traduire le module.

Ce type de déclencheur devient un blueprint avec un script générique qui va lire le Tag du déclencheur pour savoir quels textes afficher et quelles actions à prendre. Il reste de la place pour introduire de nouvelles fonctionnalités, mais cela va déjà me faciliter grandement la vie sans alourdir le module d’une kyrielle de scripts au rythme de 1 par déclencheur.

Cerise sur le gâteau, ce système me permet de vérifier que le joueur possède bien la dernière version des 2da dans son dossier ‘override’ dès sa connexion au module et de l’informer qu’il doit mettre ses fichiers à jour le cas échéant.

Dans le même ordre d’idée, je viens de terminer un camp gobelours, ça fait toujours rire les petits et les grands ces bêtes-là, et je me suis rendu compte de l’efficacité du nouveau système de spawn ASSP, puisque je peux créer des points de spawn à la volée, aussi bien qu’en détruire. Je peux ainsi concevoir des embuscades de même que désactiver les spawns d’une carte, par exemple si le chef de la troupe est vaincu.

30 mai 2018

Le prêtre de Selene, en plus des charmes de protection, offre en plus un réglage de difficulté des rencontres. En facile, c’est toujours le nombre minimum de mobs qui spawneront et en difficile le maximum. En normal, un nombre aléatoire entre les deux. Voilà longtemps que j’aurais dû (tu parles, 15 ans…) offrir une expérience de jeu différente selon les classes, essentiellement à petit niveau. Quand tu te pointes avec un mage niveau 1 à 4 points de vie et 12 en armure face à 3 rats, ben t’es mort, et tu es bon pour dépenser tout ton argent à acheter des baguettes jusqu’à un niveau assez élévé.

J’ai ré-agencé toutes les quêtes de newbies puisque la ville ne comporte plus qu’une seule zone et je commence à aller repêcher toutes les anciennes quêtes.

29 mai 2018

Le nouveau, et à présent unique, système de spawn ASSP fonctionne à merveille : fiable, aucun lag, souple, léger, tous les tests sont au vert.

Je repasse toutes les zones existantes avec le nouveau système puis je démarre le repêchage de toutes les zones dans les anciens modules, selon la méthode de la destruction : chaque fois que j’ai exporté une zone d’un ancien module, je l’en détruis, jusqu’à ce qu’il n’en reste aucune.

28 mai 2018

J’ai bazardé tous les systèmes de spawn Althea. Trois types coexistaient, dont aucun ne me satisfaisait vraiment. Le nouveau système n’utilise plus de boucles ni les UDF de zones. Il suffit de poser un placeable au point de spawn qui a pour tag le numéro de ligne d’un 2da correspondant au spawn souhaité et d’initialiser le système en entrée de zone. Tout le fonctionnement est absolument transparent. Pour ajouter de nouveaux types de spawn, on ajoutera des lignes au fichier ASSP.2da que je compte laisser dans le dossier override pour éviter d’avoir à refaire le hak quand de nouvelles zones et de nouveaux spawns sont introduits. Cela m’aurait pris une journée de travail, c’est finalement pas cher payé pour un système souple, léger et qui répond à tous les besoins.

27 mai 2018

Aujourd’hui, j’ai fait fort. Pour tester la différence de rapidité d’édition d’un module selon qu’il se trouve sur disque dur ou SSD, j’ai créé un dossier modules sur mon SSD où j’ai copié les modules (tous d’un coup, plus rapide). Après avoir terminé les tests sur disque dur, je mets le dossier modules (qui contient donc TOUS les modules) à la corbeille, je change mon fichier NWN.ini et je teste la vitesse d’accès sur SSD. J’obtiens exactement la même valeur que sur le disque dur, donc je n’ai aucune raison d’user mon SSD, je rechange le NWN.ini et je mets à la poubelle le dossier modules du SSD dont je n’ai plus besoin. Et puis, comme je suis quelqu’un d’ordonné, je vide la corbeille. Et j’efface donc définitivement TOUS les modules simultanément du SSD et du disque dur. Un ‘merde’ plus tard (ce qui a bien pris dix secondes vu l’ampleur du ‘merde’), je me retrouve sans aucun module. Fini. Partis. Tous. Arvar !

Comme il a un dieu pour les sous-doués, j’avais fait un backup général sur mon NAS ce matin. Et comme je suis allé courir fin de matinée et qu’ensuite je suis allé voir mon fils à sa régate d’aviron, je n’ai perdu qu’une heure de travail. C’est pas du bol ça ?

Gros travail sur la mémoire du Monde. L’histoire de l’univers de jeu est nouvelle, je dois donc modifier tout ce qui fait référence aux ordres de chevalerie, au portail et à une foule d’autres choses. Je crois que le plus simple est de détruire le dialogue de la mémoire et de repartir à zéro.

Les gemmes roses auront comme utilité d’améliorer des objets de quête. C’est dommage après avoir réussi une longue quête pour une armure de classe spécifique de devoir la jeter quand on monte de niveau, j’ai l’intention de les créer en plusieurs niveaux de puissance et de permettre leur upgrade.

26 mai 2018

Création d’un script mod_onequip pour tester la validité des objets équipés par les PJs. Précédemment, la vérification se faisait à intervalles réguliers avec test séquentiel pour tous les joueurs. Beaucoup trop lourd, et en plus injustifié, autant faire le test lorsque le PJ équipe un objet, cela évite une boucle et une pointe de consommation CPU.

Rapatriement progressif de toutes les quêtes. Certaines zones sont utilisées telles quelles, d’autres doivent être aménagées. En plus j’ai un nouveau clavier, mon fidèle Logitech Wave étant usé jusqu’à la corde, je suis d’une lenteur affligeante le temps de m’habituer à ce nouveau Corsair K55 dont le principal mérite, pour l’instant, se borne à de jolies couleurs.

25 mai 2018

Terminer la ville centrale, qui ne comporte qu’une seule zone où se dérouleront beaucoup de choses. Ca, c’est la priorité.

Ensuite, j’ai jeté les bases d’un système d’indexation des bases de données qui me permettra d’obtenir les mêmes avantages que NWNX. Presque, c’est carrément moins bien puisque je dois me passer de SQL, mais ça tournera sur Windows aussi bien que Linux sans être tributaire du brave gars qui s’occupe de ça et peut arrêter quand ça lui chante. Au moins aurais-je la possibilité de faire des recherches dans l’ensemble des joueurs connectés ou non, ce qui me permettra, par exemple, de remettre en circulation dans l’univers un objet unique détenu par un joueur qui ne s’est pas connecté depuis trop longtemps.

24 mai 2018

J’avais terminé une refonte de la ville centrale, dont j’étais très content, quand ma femme m’a dit : “tu sais qu’on peut aller au-delà de 16 cases de côté maintenant ?” Ben non, je ne le savais pas. Du coup, j’ai refais la ville avec le tileset CRFM qui regroupe ville, campagne, forêt et mines et, après m’être demandé dans quel guêpier je m’étais fourré, j’ai dû tout mettre à la poubelle : le CRFM ne peut afficher un fleuve correctement car la profondeur de l’eau est différente entre les différents tilesets.

Retour à la ville d’origine, que j’agrandis quand même au passage. C’est d’autant plus rageant que j’ai beaucoup de travail pour le moment, le temps m’est compté. Enfin, faire et défaire c’est toujours travailler. J’espère que l’abruti qui a inventé ce proverbe est fier de sa trouvaille !

23 mai 2018

Je démarre le développement d’un nouveau module, Myrda, la conception d’Althea est trop ancienne, elle me freine, je repars à zéro.

22 mai 2018

Installation de NWNX. Ratée. Quelque chose coince. Pas eu le temp d’approfondir en raison d’un travail urgent de traduction d’un ouvrage de pneumo-pédiatrie mais en faisant la sieste (faut pas perdre de vue les choses importantes !) je me suis rendu compte que si NWNX a l’avantage de permettre un accès SQL aux bases de données, c’est quand même une grosse merde à mettre en place et il ne fonctionne pas sous Windows ce qui me rendrait les phases de test hasardeuses à moins de faire co-exister les deux systèmes de DB, NWNX et NBDE. C’est possible mais fastidieux et, à la réflexion, pour les quelques commandes SQL dont j’ai besoin, j’aurai aussi vite fait de les programmer par l’éditeur en construisant une DB d’index des joueurs.

Donc, on oublie.

Sais pas trop quoi faire ensuite. Je dois récupérer toutes les quêtes manquantes en fouillant les anciens modules, et d’un autre côté je dois monter un perso niveau 20 pour tester la jouabilité du module à fond. Par quoi commencer, that is question.

Sachant qu’à terme, mon gros chantier, et projet préféré, est d’amener à la vie l’environnement PNJ pour renforcer l’ancrage des joueurs dans le monde. Ca va être géant, mais c’est un chantier très long. Quoi que, j’ai déjà toutes les idées et je code aussi vite qu’avant, alors, qu’est-ce qu’on attend ? Ben d’avoir récupéré toutes les quêtes, mis en route un deuxième serveur et tout testé avec au moins un perso monté de zéro. Broutilles, à peine quelques centaines d’heures de travail, ça devrait être fait pour la fin du mois !

21 mai 2018

Le prochain module publié utilisera le nouveau hak. J’ai redressé – comme j’ai pu – tous les blueprints de créatures. Beaucoup de problèmes viennent de la localisation. Nombre de noms existent dans la version anglaise des ressources alors que la version française est vierge. Parfois la version anglaise s’affiche dans la version française, ce qui est normal, parfois le jeu prend la ressource française par défaut de l’objet, ce qui est contrariant, car elle correspond au resref de l’objet à partir duquel j’ai créé le blueprint.

J’ai passé en revue le hak d’apparences qui permet de changer ses ailes, sa queue, son visage, de monter un cheval, etc. Je garde l’idée sous le coude mais tout l’intérêt d’Althea est justement d’aller chercher certains signes distinctifs, les donner gratuitement me dérange. Quant aux chevaux, ils déséquilibreraient complètement le module, je ne compte pas les intégrer, sauf demande massive et justifiée des joueurs – qui sont deux pour le moment, pour le massif c’est bon.

J’ai ajouté le Jukalotto à la taverne des Cinq des Six du centre de Soufflevent. C’est un travail inachevé, pour l’instant il joue une des 250 musiques du jeu en fonction du nombre de pièces d’or que l’on place dedans.

20 mai 2018

Hakpak terminé. Il faut télécharger le hak althea_jap_01.hak et les musiques cmp_v1.0.full_, qui elles se décompressent dans le répertoire ‘music’ et non le répertoire ‘hak’.

Par rapport aux débuts d’Althea, le contenu du jeu de base est beaucoup plus important à tous points de vue. Comme je compte me focaliser plus sur le gameplay que sur quoi que ce soit d’autre, les hakpaks que j’ai passé en revue toute la journée n’offrent pas un intérêt transcendant par rapport aux très nombreux ajouts du hakpak d’Althea originel. J’ai ajouté des boucliers, parce que je suis fou de boucliers et des coiffes qui me permettront de donner corps à une société secrète, mais à part ça, quoi d’autre ? Un hak de 4600 fichiers pour un reskin des armes… bof, sans effets visuels, ça reste des bouts de fer et de bois, je ne voyais même pas la différence, j’étais obligé de faire des copies d’écran.

Je mettrai en download optionnel des portraits et des musiques, ce qui me permettra de placer un jukebox dans les tavernes !

Quand le serveur sera parfaitement en route, il reste du boulot avant ça ! je me remettrai à la conception de modèles sous 3DSMax, j’en ai fait quelques-uns qui sont dans le module déjà, mais je compte y aller à fond sur les effets visuels.

Je compte bientôt fouiller les modules pour retrouver les quêtes dont je ne dispose plus, je pense que cela sera ma prochaine priorité, peut-être avec une ré-installation de NWNX, c’est tout de même gentil de pouvoir accéder aux données par SQL.

19 mai 2019

Travail sur les hakpaks, je commence avec les 2DA avant d’ajouter du contenu. Ca se passe comme ça :

Trouver les 2DA officiels. Ca, c’est assez facile, ce sont les 1.69.
Extraire dans un dossier (avec nwhak.exe) tous les 2DA d’Althea, soit tous les fichiers de référence modifiés par rapport au jeu originel.
Extraire dans un autre dossier tous les 2DA officiels correspondant à ceux modifiés dans Althea.
Ouvrir avec notepad un même fichier 2DA dans ses deux versions, Althea et officielle.
Chercher les différences.
Copier les éléments d’Althea où il y a de la place dans les officiels, généralement à la fin parce qu’il n’y a pas de place, ce qui n’est pas grave parce que ces éléments ne seront de toutes façons pas au même endroit que dans le 2DA Althea et que tous les blueprints custom du module devront être refaits.
Enregistrer le nouveau 2DA ainsi obtenu.
L’ouvrir dans Excel correctement configuré pour que les données se mettent dans les bonnes cases. Facile.
Renuméroter dans Excel les lignes de données. Inutile, mais c’est plus joli et ça peut servir dans le futur.
Copier les données d’Excel (sauf la première ligne qui fera foirer le dernier logiciel utilisé…) dans le nouveau document texte.
Utiliser 2DA & TLK Editor déniché sur le Vault pour ouvrir ce document texte.
Enregistrer le document, à présent parfaitement numéroté et aligné.
Placer le document dans le dossier ‘override’ pour tester sa validité et le bon fonctionnement des blueprints standard.
Aller se chercher une petite bière et passer au 2DA suivant.

J’espérais ne plus avoir à m’embarrasser des ces complications après avoir redressé le 2DA des placeables, mais j’ai malheureusement remarqué que les blueprints standard des créatures étaient cassés, pour la même raison que Bioware a ajouté beaucoup de données après la conception d’Althea et que je n’avais d’autre choix que de refaire tous les 2DA pour bénéficier des nouveautés.

J’ai, par chance, retrouvé les fichiers .BMU des musiques custom d’Althea. J’en ai profité pour charger le cmp_v1.0.full_ du vault, qui contient quelques 300 musiques et faire un 2DA approprié. Bon, 400 mégas, je vais peut-être virer toutes les saloperies faites au synthétiseur. Encore du boulot, mais les musiques c’est important.

18 mai 2018

Les travaux d’instanciation sont terminés et très concluants, la première application concerne les maisons. Quatre modèles sont disponibles, appartement à 50k, maison à 100k, manoir à 200k et chateau à 500k. De mémoire, je ne suis plus sûr des prix et cela changera de toutes façons. Puisque le compte premium est offert à tous par Tonton (moi j’aurais donné que dalle, mais il est comme ça…), il était urgent d’automatiser les habitations privées sans que je doive concevoir une carte et ses accès pour chaque joueur. C’est chose faite. Les bases sont là pour la création d’instances de raid, dans un futur proche.

La marchande de meubles du marché est devenue “Architecte” et, en plus des divers outils, vend à présent les propriétés.

Le problème du serveur qui consommait 100% d’un des coeurs du processeur dès qu’un utilisateur se connectait est résolu. Une ligne dans la configuration serveur de nwnplayer.ini spécifie à partir de combien de joueurs le serveur doit sortir de sleep mode et tourner à plein régime, et par défaut la config est à 1. Je ne comprends pas l’intérêt de cette option, je l’ai mise à 50, on verra bien. D’après mes premiers tests, je ne constate pas d’incidence. C’est en tous cas une bonne nouvelle, j’étais assez inquiet de cet usage excessif de la puissance machine, j’espère que cette péripétie clôture définitivement le chapitre des pertes de temps liées à la technique serveur, maintenant que j’ai également appris à utiliser la commande ‘screen’ ce qui m’évite de galoper à la salle machine – qui est ma cave à vins, on ne rit pas dans le fond ! – pour relancer le serveur.

Dominique travaille sur l’aspect graphique de certaines zones. Elle a l’air d’y prendre plaisir, tant mieux !

17 mai 2018

Installé le jeu sur l’ordinateur de Dominique pour 17€ chez Beamdog directement, autant faire vivre le petit commerce. Elle va décorer toutes les zones du monde qui doivent encore l’être, certaines sont tristes à pleurer, j’ai refait le centre de Soufflevent et le quartier des humains, mais il reste du boulot.

Le système de factions de pouvoirs fait lentement son chemin. Au départ je vais recréer des lobbies, tels que les ménestrels, les nobles, les marchands, les voleurs et que sais-je. Un joueur qui aura gagné assez de réputation pourra prétendre à prendre le contrôle de l’une de ces factions et tous ses membres lui répondront. C’est l’idée. Si nous avons assez de joueurs, ce développement sera inutile. A voir.

Je travaille à la création de zones dynamiques : tu ouvres une des nombreuses portes en ville qui ne donnent sur rien et une zone se créée d’après l’un des modèles prévus à cet effet. Tu peux ainsi entrer dans une zone qui n’existait pas avant que tu ne provoques sa création. Dans ces zones, du banal, famille à table, scènes de la vie quotidienne, mais aussi des événements: réunion secrète, cambriolage en cours, etc. Des PJs (dont je dois de toute urgence peaufiner le comportement et les tenues, ils m’énervent !) qui se promènent en ville pourront accoster les joueurs pour leur demander de l’aider où les prévenir d’un danger, toujours en fonction de leur alignement/réputation/faction/renommée.

En un mot comme en cent : j’ai bien décidé de faire de l’univers de jeu un univers vivant et réaliste où tout et n’importe quoi peut se produire à tout instant. Si le serveur est aussi fiable qu’il le laisse penser, Althea va être propulsé à des niveaux auxquels personne n’aurait pu rêver à la grande époque !

Ah, oui, j’oubliais ! Si le travail d’instanciation est concluant, je compte bien réaliser des instances de raids, sur le modèle de WoW, autant prendre ce qui marche chez tout le monde ! Les joueurs qui voudraient entreprendre une instance sans être assez nombreux seront assistés par des PNJs dont j’aurai mis au point l’intelligence artificielle pour qu’il puissent répondre aux ordres du chef de raid. Ils ne pourront de toute façon jamais être pires que certains péberons qui s’incrustent dans les raids WoW semaine après semaine.

16 mai 2018

Le premier joueur à se connecter sur Althea s’appelait Orval… Salut Pat, comment tu vas ? Ce bon vieux Pat, un copain de régiment – et c’est vrai en plus – merci à lui d’avoir acheté le jeu et de m’avoir permis de constater, en se connectant, que le serveur fonctionne parfaitement !

Au gué de Soufflevent, j’ai spawné tant de créatures de factions opposées que ma carte graphique criait au secours… et le serveur n’a pas bronché. Il affiche 100% d’utilisation d’un de ses deux coeurs (vaillants !) mais c’est du flan, en fait il est impossible de le mettre à genoux, jamais je n’aurais pu soumettre l’ancien serveur à pareille épreuve. Quand je pense que cette machine a failli finir à la poubelle ! Un vieux Intel(R) Core2 Duo CPU E6550 @ 2.33GHz, 2 coeurs avec 2Go de RAM, un disque de 300Go et une NVidia 460. Le truc qui se vend 50€ sur 2ememain.be -acheté 700€ en 2007 quand même, avec un écran plat 21″. En fait, avec une distro Linux dessus, c’est de la bombe ! Non seulement il nous sert de box multimédia pour nos entraînements de rameur dans la cave, mais en plus, il est largement suffisant pour encaisser quelques dizaines de joueurs, j’en suis certain.

Pour dire la vérité, l’épreuve de l’installation d’un serveur Linux dédié m’a éreinté, je vais reprendre le développement du module, mais là j’accuse le coup, je n’aime pas trop les trucs techniques, trop de bidouillage à mon goût, mais ça valait la peine, peu importe l’avenir du module, il est rené de ses cendres. Oui, je sais, Larousse dit que renaître n’a ni participe passé ni temps composés, mais pour une fois que cela m’arrange, je vais ignorer les recommandations de la Grande Maison.

15 mai 2018

Server Name: FR] Althea
Maximum Clients: 44
Server Port: 5121
Module Name: althea
Module Status: Running
PVP: Party
Difficulty: 2             Levels: 1 to 40
ELC: 1                    ILR: 0
One Party: 1              Server Vault: 0           Pause and Play: 0
Reload when Empty: 0      AutoSave Interval: 0      Public Server: 1

ID |         Player Name |        IP Address |      Character Name  | CD Key(s)
—+———————+——————-+———————-+————
0 |             Thierry |      192.168.1.27 | Miriandel of Britain | QRM3DWPV

Voilà, c’était dur, très dur même, merci à Bruno, Patrick et Chichi qui m’ont soutenu dans l’épreuve, je viens de passer deux jours dans la cave, au propre comme au figuré, mais le module est en ligne !

Bon, je ne suis pas au bout de mes peines, loin s’en faut et je n’ai même pas le coeur de relater tout ce par quoi il a déjà fallu passer jusqu’ici, je renseignerai simplement que :

  • ni les haks ni les modules ne peuvent comporter de majuscules, ça cause des problèmes
  • les modules doivent se terminer par “.mod” mais le shell de démarrage ne doit pas reprendre le “.mod”, ceci m’a coûté une journée de recherches !

14 mai 2018

J’ai terminé l’installation d’Ubuntu sur le serveur mais je n’arrive pas encore à lancer les exécutables linux, et pourtant c’est déjà une grande victoire vu d’où je viens! Si j’ai le temps après mon jogging je laisserai à la postérité tout ce qui m’est tombé sur la tête depuis hier, c’est du plus haut comique !

13 mai 2018

Mise en service du module, phase 1 (en clair: aucune idée de comment ça va se passer !)

Fin du travail sur les charmes de Selene, qui pour le moment ne sont que deux:

Coût en PO par niveau

Déclenchement

Effet

50 Entre 0 et -9 PV Ethéré, 20 secondes
Régénération de 3, 20 secondes
100 Toujours sous 0 PV, sans limite Ethéré, 12 secondes
Régénération de 6, 20 secondes

 

12 mai 2018

J’ai détruit le ‘on heartbeat’ du module. Je ne comprends pas comment ce script pouvait exister : toutes les 6 secondes chaque joueur connecté déclenchait plusieurs checks, exactement ce qu’il faut pour mettre un serveur à genoux. J’ai donc déplacé tous ces checks à d’autres endroits, supprimé les boucles et ré-écrit Bleedcheck de manière récursive pour que les événements à la mort, qui impliquent aussi les charmes de Selene, ne concernent plus que le joueur en difficulté. Je suis en train de réfléchir à l’opportunité de trafiquer mod_ondeath pour qu’un charme de Selene évite la mort et amène le joueur à 0, pas certain que ce soit utile ni possible, à mettre quelque part en ‘to do’.

11 mai 2018

Le prêtre de Selene propose des contrats de protection. Le petit augmente les chances de survivre à un coup fatal, le moyen le garantit et le grand n’est accessible qu’aux joueurs profondément impliqués dans la vie du monde, critères qui restent à définir mais je pense, pour les mauvais par exemple, à leur faire siphonner la vie autour d’eux, même de leurs alliés, pour ne pas mourir. Une option a été ajoutée à la pierre de destinée pour retourner directement au temple de Sélène pour recharger son charme de protection.

Bien sûr, je pense toujours en avoir pour quelques minutes pour mettre en place un système de jeu “aussi simple” et à l’arrivée je me retrouve avec un brol de ce genre :

Je vais lancer le module très bientôt, annoncé en bêta, quand faut y aller, faut y aller, si j’attends d’avoir tout exploré et revérifié, j’en ai pour des mois. Je crève de trouille que mon serveur ne tienne pas le choc, il n’est pas de première jeunesse, et je dois encore trouver un Watchdog de qualité pour garantir l’uptime, je déteste ces impedimenta techniques.

10 mai 2018

Quête d’Amendil terminée, fonctionnement de l’ASSP satisfaisant (on peut ainsi désactiver les spawns en envoyant un UDF(0) au lieu de (5000), pratique).

Dans l’optique d’ancrer le personnage dans l’univers, je vais implémenter un système de bardes qui chanteront les exploits des joueurs, d’après la base de données des quêtes.

Je passe à la vérification de la todo list dans l’optique d’une mise en ligne rapide du module, il est prêt.

En travaillant sur le prêtre de Selene, qui ne servait à rien du tout, je me suis rendu compte que j’utilise le ‘on heartbeat’ pour les procédures de potions, de bandages et d’événements à la mort. C’est le meilleur moyen de mettre le processeur à genoux, je dois absolument changer ça en DelayCommand ou UDF.

09 mai 2018

Debugger udf_amendilzone qui semble buggé depuis 15 ans… les spawns en référence n’existent pas! Terminer la quête de ce brave Amendil.

Je refais le dialogue d’Amendil de A à Z, bouclant au passage une quête simple mais je crois efficace dans les Tombes gardiennes, zone qui n’a jamais servi à rien d’autre que balancer des tombereaux d’undeads à la tête des PJs, et je me rends compte que si l’univers du jeu a changé depuis les débuts d’Althea, moi aussi j’ai changé. Je réalise les possibilités narratives exceptionnelles de Neverwinter Nights. De simples dialogues couplés à une utilisation tout aussi simple de la base de données des quêtes permet d’envoyer les joueurs sur des chemins de traverse parfaitement surprenants et, avec un peu plus d’efforts, sur la trace de quêtes épiques fascinantes. De beaux jours se profilent, je pense pouvoir proposer du contenu passionnant à très peu de frais en matière de développement.

L’intérêt de comptabiliser l’influence des actions des joueurs sur les alignement m’apparaît aussi de plus en plus clairement, me poussant à capitaliser sur la qualité d’interprétation de son personnage, car une quête pourra se comporter de manière tout à fait différente selon l’alignement du joueur et offrir des dénouements extrêmement variés.

Evidemment, je pense plus que jamais à réduire l’influence de Krynn dans le module, qui était surtout le dada de Yan que nous ne risquons plus de revoir de sitôt si son mariage thaïlandais se concrétise et qu’il part s’établir à l’autre bout du monde, et à transposer l’univers de Mirda dans un avenir proche, tel que décrit dans mes romans.

Ceci se greffe naturellement sur le nouveau système d’appréciation auquel je pense et qui permet à un jouer de manifester son respect ou son mépris à un autre. Une fois encore, si cela n’a jamais été fait, c’est probablement que c’est impossible, mais j’ai vraiment très envie d’essayer, je pense être arrivé à un niveau d’expérience qui me permette de l’envisager sereinement.

08 mai 2018

Terminé l’AWSS, aussitôt rebaptisé ASSP pour Point, par opposition à ASSZ pour Zone. L’ancienne routine void ASS() appelle d’abord l’ASSP au cas où un spawn très précis serait demandé, puis passe la main à l’ASSZ pour du remplissage de zone ancienne mouture.

L’ASSP a pour lui l’avantage de la précision, les mobs sont créés pile sur un placeable. Cette méthode permet aussi de se passer des déclencheurs inefficaces quand une zone a plusieurs points d’entrée. Attention à un gros bug cependant: le nom des objets n’est pas sélectionné de manière cohérente selon la langue du jeu. Parfois il prend le français, parfois l’anglais, il faut donc faire très attention à ce que le nom de l’objet soit identique dans toutes les langues.

Quant au joueurs qui voudraient camper un point de spawn, ils ne gagneront rien à attendre 2 minutes plutôt qu’à se déplacer jusqu’au spawn suivant, donc je laisse.

07 mai 2018

Je pensais déjà entamer de monter un perso, mais en allant faire un tour au cimetière de Soufflevent, je me suis rendu compte qu’il y a là un PNJ, Amendil, qui n’apparaît qu’à la nuit tombée et qui propose une conversation du plus haut cucul et qui ne mène nulle part. C’est pratiquement tout ce qui reste de la première version d’Althea avant que je ne commence à développer le module, je vais le garder comme souvenir et tenter de lui donner une raison d’exister.

Je dois modifier les routines de l’ASS (Althea spawn system) pour s’accommoder de points de spawn plutôt que de zones aléatoires dans une carte, ce qui me permettra d’utiliser l’ASS même dans les cartes remplies d’endroits inaccessibles. Je commence donc à écrire l’AWSS (Althea Waypoint Spawn System) qui va peupler la carte là où sont placés des waypoints de spawn (ou objets décoratifs quoi que je n’aime pas donner deux fonctions à un seul objet). Je dois réfléchir à quel waypoint utiliser pour spawner les mobs pour éviter qu’ils ne spawnent sous le nez du joueur. Probablement en prenant un des WP au hasard et vérifier qu’aucun joueur n’est trop proche du point. Sinon ils vont camper, c’est clair !

06 mai 2018

Tous les placeables de toutes les zones ont été rectifiés. J’ai également un peu revu l’artisanat pour le rendre plus accessible. Je ne suis pas entièrement satisfait de la situation mais le code est abondant, je préfère ne pas trop y toucher.

05 mai 2018

Nous sommes arrivés avec Dominique aux zones commençant par K.

04 mai 2018

Je ne suis pas satisfait des 2DA des haks, ils sont incohérents. Il m’est impossible d’utiliser les placeables du jeu de base, puisque les placeables d’Althea occupent un espace qu’occupent maintenant les nouveaux objets, d’où conflits.

Voici ce que j’ai pu déterminer jusqu’ici:
1 On peut supprimer la ressource placeables.2DA des hakpaks et la placer dans le dossier override pour accélérer les tests
2 Il faut faire très attention à la langue dans laquelle on travaille, je pense que quand la case est jaune c’est qu’aucune ressource linguistique n’existe et que sinon il prend la première qu’il trouve quelle que soit la sélection de langue.
3 Une fois le travail terminé, il faudra repasser le jeu en français et modifier la description anglaise de chaque blueprint. Pas aussi lourd que ça en a l’air.
4 Les placeables sont classés par ligne dans le 2DA, indépendamment du numéro de ligne, purement cosmétique.
5 La seule réparation efficace consiste à repartir du 2DA officiel, de l’augmenter éventuellement de quelques centaines de lignes vides, puis d’ajouter les objets propres au 2DA Althea et d’ensuite modifier tous les blueprints et d’enfin vérifier chaque placeable dans chaque zone.

Voilà, le travail est énorme mais indispensable: j’ai reconstruit un fichier 2DA à partir de l’original 1.72 augmenté des placeables Althea. Comme ça, plus rien ne fonctionne nulle part mais au moins j’ai l’intégralité des placeables du jeu.

Maxime et moi avons corrigé tous les blueprints et sommes occupés à remplacer dans chaque carte l’apparence de chaque placeable. Oui, c’est un boulot de titan, sans mon fils je n’aurais pas le courage, mais toute autre solution serait du travail bâclé. Nous avons terminé les cartes commençant par C, dès demain nous continuons avec les D.

03 mai 2018

Le mégabug de la mort qui tue… Quand on ouvre un dialogue alors que le jeu est en français (il faut pour cela ajouter manuellement la ligne ‘language=fr’ après ‘Display Options’ dans NWN.INI, très intuitif pour des abrutis nourris à la ligne de commande dès le biberon), il affiche la version anglaise de la conversation et non la ressource française qui est en fait vide. J’ai mis deux heures à comprendre pourquoi les modifications que je faisais aux conversations n’avaient aucune répercussion dans le jeu, après avoir épuisé tout mon répertoire, et il est copieux, de ficelles vicieuses pour forcer un soft à faire ce qu’il ne veut absolument pas faire.

Bon, j’ai terminé la révision des quêtes d’Aruvil. Je les déteste. J’ai honte, c’est du travail bâclé, tout juste bon pour la poubelle. Mais je n’ai pas le temps de les refaire, elles fonctionnent, passons à autre chose.

02 mai 2018

Travail sur les quêtes d’Aruvil. La quête de Fenlick était un tel fatras que le rouge m’en monte au front. J’ai tout viré et ré-écrit trois ou quatre lignes, bien suffisantes. Pas étonnant que cette horreur ait toujours été buggée.

La quête de Dalamar n’était pas mieux, je l’ai revisitée, offrant au passage une cape de deux sorts 1 et un sort 0 pour les pauvres mages qui ont la vie bien difficile à bas niveau.

Détruit l’include inc_m_quests, inutilisé, reliquat d’un passé inachevé sans doute.

01 mai 2018

Travail sur la banque terminé. Tests concluants sur l’assemblage, réparation du maître de la guilde des inventeurs dont la conversation manquait.

30 avril 2018

Premier plan d’un système de réputation où les joueurs honoreraient ou conspueraient un autre joueur. L’idée est de donner à la classe de paladin le lustre qu’elle n’a jamais eu sur un jeu en ligne. Les abus sont le frein ; j’imagine que chaque joueur construise une réserve de points de respect et de mépris, idéalement indépendante du temps de connexion, et dont il disposerait à sa guise. L’idée est encore lointaine, si personne ne l’a jamais fait c’est qu’il y a des raisons, sur lesquelles je me casserai les dents bien assez tôt. J’ai pourtant bon espoir de faire quelque chose d’intéressant.

29 avril 2018

J’ai rassemblé le hak 000 et le hak 001 dans le hak Althea_v000. J’aime ce qui est net et avoir le hak divisé en deux morceaux n’était pas net.

Les temps ont changé, j’ai pris le parti de charger les décors, à commencer par Soufflevent. J’ai ajouté des marchands et une banque, que je suis en train de scripter. Quoi qu’un script de banque doive déjà exister quelque part, mais comme je trouve toujours que le code public est trop chargé, je ne prends même pas la peine d’en chercher un, j’écris le mien.

28 avril 2018

Je progresse dans la découverte des problèmes, ce qui est encourageant dans la mesure où le problème précède toujours la solution. On se motive comme on peut. Quoi qu’il en soit, les hakpaks version 1 (appelés 000) utilisent des fichiers 2DA obsolètes. Par exemple, de nombreux “placeables” ont été ajoutés par Bioware au fil des années et les placeables d’Althea occupent l’espace de leur définition, les rendant inaccessibles. Les versions ultérieures des hakpaks (2 et 3) n’arrangent rien, mon vieux module ne peut les utiliser, les placeables sont dans le désordre et ne contiennent de toutes façons pas les dernières créations officielles. Après une bonne séance d’arrachage de cheveux, j’ai tenté d’ajouter après la liste des placeables Althea 1 la liste des placeables Bioware qui ne se trouvent pas déjà dans le .2DA, ce qui offre le double avantage de ne rien devoir changer au hakpaks version 1 et de quand même avoir accès à tout le contenu de base. Après une séance de bidouillage en bonne et due forme : ça marche ! Non seulement j’ai accès à tous les placeables du module de 2003 mais aussi à tous ceux des versions ultérieures du jeu de base. La mauvaise nouvelle, il en faut toujours une, c’est que tout ce qui a été fait à partir du hakpak version 2, et à fortiori le 3, est inutilisable car l’ordre des placeables ne correspond pas à la version 1.

27 avril 2018.

La grosse tuile. Les modules que j’ai récupérés sont inutilisables. J’ai relevé des problèmes de scripting insurmontables: scripts NWNX non encapsulés disséminés partout dans le code, scripts génériques hard-codés, redéfinition de fonctions standard (ce que mon compilateur accueille très justement avec le doigt du milieu levé), et autres joyeusetés.

Je n’ai donc pas d’autre choix que de repartir de mon vieux module et d’intégrer mes anciennes quêtes quand je tomberai dessus par hasard lors d’une séance de fouilles.

26 avril 2018.

Lorsque j’ai décidé de ne plus poursuivre le développement d’Althea, j’ai accepté à la demande de certains joueurs qu’ils reprennent les modules et continuent à les faire vivre et évoluer. C’est ce qu’ils ont fait : de nombreux anciens joueurs ont continué l’aventure. C’est heureux car, grâce à Patrick, alias Alvin et Bruno, alias Corso, j’ai pu récupérer aujourd’hui les 4 modules d’Althea qui ont tourné sur le serveur de Corso pendant des années. Je ne saurais trop leur exprimer ma gratitude, car sans eux un travail considérable aurait été perdu, le module que j’ai pu retrouver par hasard sur un vieux CD ne comportait pas nombre de mes plus belles quêtes. Ils ont mille fois mérité un compte premium à vie !

Côté développement, j’ai réalisé une nouvelle routine de gestion des coffres des vendeurs qui résout tous les problèmes de ActionGiveItem en détruisant le coffre pour le remplacer par un neuf, identique. C’est le bazooka pour tuer la mouche, mais cela permettra, par le biais de la conversation avec le vendeur, de remplacer un coffre buggé en position ouverte par un nouveau, vieux bug dont je n’avais jamais pu triompher par le passé.

25 avril 2018.

Tous les appels de base données sont modifiés, à charge de les tester. Les premiers résultats sont passés de “curieux” à “encourageants”. Quoi qu’ils restent tout de même, la plupart du temps, un peu curieux car la syntaxe de certaines fonctions essentielles a changé au fil des années. Les systèmes se réactivent les uns après les autres, je corrige des bugs dont je ne comprends pas toujours comment ils peuvent subsister dans un module aussi ancien.

Je n’ai pas encore pu commencer le débugging des quêtes de débutant, demain peut-être.

24 avril 2018.

Au programme du jour, Aruvil, l’elfe donneur de quêtes au quartier général de l’Alliance. Les quêtes du stock d’armes et d’Eorkwold sont buggées. Je compte aussi assouplir la limitation de répétition.

Destruction de aps_include: adieu NWNX! J’ai repassé tout les appels de base de données sur NBDE. Tout cela est extrêmement risqué, je modifie des dizaines de scripts comportant des appels imbriqués à l’aveugle, tout va se jouer au test. Ce n’est pas du tout professionnel, mais ai-je le choix ?

23 avril 2018.

Je repars sur un module d’août 2003. Quinze ans après, je ne me souviens plus de grand-chose, tout est à refaire, je ne me souviens plus des scripts, des quêtes, des zones, des systèmes de jeu, rien !

Alors je ré-apprends, aussi vite que possible. Pour commencer, je fais le ménage, je simplifie toutes les choses artificielles ou compliquées que je vois et je remonte un personnage fragile de zéro pour éprouver l’expérience de jeu comme n’importe quel joueur.

Pour le moment, je fais la chasse aux bugs, je m’assure que le module est agréable pour un débutant, et je remets en route tous les systèmes de jeu au fur et à mesure que je les rencontre.

Haut les coeurs !