Après plusieurs, j'ai trouvé un peu de temps pour jeter un coup d'oeil à la nouvelle version de ton éditeur. Je n'ai pas pu aller jusqu'à la vérification des fichiers produits par l'éditeur pour l'instant, cependant.
On voit que tu as abattu un travail conséquent par rapport à la version précédente. Dans l'ensemble cette version semble assez bien tenir la route (pas de crash pendant mes essais) et s'utilise assez facilement, même si j'ai quelques remarques sur l'ergonomie.
Voici ce que j'ai noté au cours de mes essais et que je recopie de façon brute.
J'ai toujours la même remarque sur la gestion des barres de défilement qui n'est pas du tout conforme à l'ergonomie des programmes sous Windows : un clic sous la position actuelle devrait faire avancer d'une page et non positionner à la position relative du clic. Je trouve cela désagréable avec une liste de plus de 1000 créatures, car il est impossible avec la barre d'aller facilement à la page suivante dans la liste.
Le maintien appuyé sur les boutons +/- pour faire évoluer la valeur de 10 en 10 est très pratique. Ce n'est pas forcément explicite (une bulle d'aide ne serait pas de trop) mais c'est assez intuitif. Ce n'est pas disponible partout, je n'ai pas trouvé de cas où je trouvais que ça manquait.
J'ai une réserve à ce sujet : je regrette que le défilement des valeurs ne devienne pas plus rapide une fois passé le temps nécessaire à considérer que c'est un appui long. Monter la compétence d'un voleur à 100 prend pas mal de temps, par exemple, ce pourrait être réduit en considérant qu'un appui long maintenu provoque une évolution accéléré, à l'image de la répétition des caractères sur un appui long dans Wordpad ou un autre éditeur de texte.
Cas où la hausse de 10 en 10 n'est pas une bonne idée :
Nombre d'attaques : de toute façon, il faut traiter les valeurs de 0 à 5, par pas de 0,5 (*)
(*) Codage du nombre d'attaques dans les fichiers CRE
Les valeurs 0 à 5 signifient 0 à 5 (ouf)
Les valeurs 6 à 9 correspondent respectivement à 0,5 jusqu'à 4,5
Une formule de conversion simplifiée est (sens CRE vers affichage) : si valeur > 5, soustraire 5,5 à la valeur
Dans le sens inverse : si valeur non entière (0,5 par exemple), ajouter 5,5 pour obtenir la valeur pour le fichier CRE
Il manque à peu-près partout des limites aux valeurs que l'on peut modifier par les boutons +/-. Voici quelques cas (liste non exhaustive) :
Caractéristiques (force, ...) : elle ne peut pas valoir 0, le personnage meurt avec une telle valeur ; le parti pris de reboucler du max (25) au min (0) est discutable, d'autant que cela semble être le seul endroit où cela fonctionne.
Niveau : de 1 à 50 (contrainte en dur du moteur)
Compétences de voleur : de 0 à 255 (champ sur 1 octet)
Jets de sauvegarde : de 0 à 20 (d'après IESDP, de toute façon sur 1 octet, donc -128 à 127 si tu vas en négatif)
Résistances (feu...) : de 0 à 100 (d'après IESDP, de toute façon sur 1 octet, donc 255 max)
TAC0 : de 0 à 25 (d'après IESDP) ; je ne suis pas sûr qu'elle ait un sens au dessus de 20 qui est la valeur d'un personnage de niveau 1 (il peut être atteindre 24 pour une arme non maîtrisée, mais c'est géré dynamiquement en fonction de l'arme en main et de la compétence dans cette arme)
Cette valeur doit en vérité être considérée comme signée, ce qui signifie que le codage sur 1 octet alloue des valeurs de -128 à 127. Non, Abazigal n'a pas un TAC0 de 248 (le pauvre, il ne toucherait que sur un coup critique) mais plutôt de -8 (cf Near Infinity). C'est un cas particulier des monstres. Les personnages de l'équipe sont bien limités à 0 au minimum pour le TAC0 de base dans le jeu (sans triche).
CA de base : a priori la valeur maximum est 10, elle peut être négative mais elle n'a plus aucun sens en dessous de -25 (intouchable) vu la valeur minimale du TAC0.
CA actuelle : pourquoi n'y a-t-il pas de limite comme pour la CA de base ?
En pratique, la valeur actuelle ne devrait pas être éditée : c'est une valeur dynamique dans le jeu, qui tient sans doute compte de l'équipement du personnage (armure, ...). Je n'ai jamais vu une créature où elle n'était pas identique à celle de base mais je ne peux affirmer que c'est toujours le cas (non, je n'ai pas vérifié des milliers de fichiers).
Idem pour les quatre valeurs de "Modificateur xxx".
Défauts d'affichage et de rafraîchissement
------------------------------------------
Quand on dépasse 300 en points de vie, il y a des artéfacts de pixels à gauche de la valeur. Quand on dépasse 1000, on ne voit que les 3 chiffres inférieurs.
Bugs ou comportements anormaux
------------------------------
Quand on clique sur la classe "Dragon" d'Abazigal, dans la fenêtre du choix de classe, l'éditeur nous propose diverses combinaison multi-classées mais pas le moindre dragon.
Quand je sélectionne Jan, qui est Mage / Voleur - Illusionniste, que je clique sur le nom de classe, puis que je quitte la fenêtre de classe par Valider, je conserve bien sa spécificité illusionniste. Mais si je clique d'abord sur une autre classe et que je reviens sur Mage / Voleur, j'ai perdu sa spécificité Illusionniste.
D'ailleurs le parcours des classes n'est pas intuitif : une fois que j'ai choisi Mage, j'ai la liste de spécialités, mais si j'ai cliqué par erreur, je ne peux pas revenir en arrière à la liste de toutes les classes (ou alors je n'ai pas trouvé). Le seul moyen que j'ai identifié a été de cliquer sur "Tout" ou "Classes PNJ".
Quand je clique sur Guerrier, j'ai une liste de kits un peu surprenante car elle contient "Sorcier" en plus des trois kits classiques. Si je clique sur Sorcier, j'ai la description du barbare qui apparaît. Et une fois ce choix validé, j'obtiens bien un Guerrier - Sorcier dans le nom de classe du personnage.
Quoi qu'il en soit, il serait plus logique que Barbare soit traité comme une classe à part, comme Moine ou Sorcier. Autant sur le plan technique (codage de la valeur de classe) que dans le jeu, Barbare n'est pas considéré comme une sous-classe de guerrier.
Manque d'un bouton Annuler dans la fenêtre du choix des sorts Innates (pourquoi pas le français de la documentation "capacité spéciale" voire "capacité innée" ?) sorts HLA (pourquoi ne pas employer le terme français de la documentation, "faculté de haut niveau", d'ailleurs ?)
Quand je fais défiler les niveaux dans cette fenêtre, au niveau 6 des "HLA", j'obtiens un message "Impossible de se repositionner dans le fichier <xxx\Mods\monMod\dialog.tlk>". Détail de l'erreur système : Tentative de déplacement du pointeur de fichier avant le début du fichier." : le fichier dialog.tlk dans le répertoire de mod est pourtant identique à celui du dossier BG2 que j'ai indiqué dans la configuration. Ceci intervient alors qu'il n'y a aucune icône dans la liste pour ce niveau-là, ce qui donne l'impression que l'éditeur ne vérifie pas l'absence de sorts lorsqu'il cherche à afficher le texte associé au premier sort de la liste pour le niveau concerné.
Dans le livre de sorts de Lazarus (25SPELL.CRE), au niveau 1 de mage, on entrevoit qu'il a mémorisé 5 sorts, mais on n'en voit aucun. Au niveau 2, on devine qu'il a mémorisé 5 sorts, mais on n'en voit que 2, même si on voit les noms des images des autres dans l'info bulle quand on passe dessus. D'après Near Infinity, le personnage a bel et bien mémorisé SPWI217 et SPWI212, mais les icônes des sorts ne sont pas affichés dans ton éditeur, alors que l'info bulle montre bien les noms. Idem au niveau 3.
Certes la créature est bizarre car elle a mémorisé des sorts qui ne sont pas dans sa liste de sorts connus, mais pourquoi les icônes des mémorisées ne s'affichent-elles pas ?
Par ailleurs, au lieu d'afficher le nom des fichiers image dans l'info bulle, pourrais-tu afficher le nom des sorts à la place, plutôt ? Actuellement, on est réduit à connaître par coeur à quoi correspondent les icônes, il n'y a pas de moyen de savoir les noms sans avoir la description complète via le clic droit. Et c'est impossible à partir de la liste des mémorisés. Pour quelle raison ?
Dans la partie prêtre de Lazarus, au niveau 5, on voit qu'il aurait 5 emplacements de mémorisés (vides). Aux autres niveaux, c'est 1 emplacement, ce qui correspond bien aux valeurs dans le fichier CRE. Mais pourquoi afficher 5 cases au niveau 5 alors que le fichier CRE n'en indique qu'un seul (d'après Near Infinity) ?
Actuellement, l'icône de disquette fait sortir sans proposer de sauvegarder les modifications apportées ! C'est un excellent moyen de perdre son travail. Pourquoi ne pas le câbler comme le bouton Sauvegarder ?
Il y a un bug dans la gestion des portraits. Quand je clique pour la première fois sur AERIE12, j'ai bien le portrait, mais quand ensuite je passe à AERIE9, il n'apparaît plus, ni avec tous les autres AERIExx (mais c'est normal car les fichiers CRE n'indiquent pas de portraits), y compris AERIE12 avec lequel il l'avait affiché dans un premier temps. Quand je passe ensuite en revue les ANOMENxx, il n'y a pas de problème, mais de nouveau il n'y a pas de portrait quand je reviens à AERIE12.
Il serait également intéressant que tu gères le portrait de petit taille (offset 0x34). En effet de nombreux PNJ ont un tel portrait, qui apparaît lors des dialogues avec eux.
Je trouve particulièrement dérangeant d'avoir le bouton de choix d'objet dans l'inventaire au milieu des boutons qui permettent de charger, sauvegarder ou supprimer. Cet emplacement n'est pas du tout ergonomique. On peut alors se demander si "Supprimer" sert à supprimer un objet ou le fichier CRE.
Les quatre boutons rouges sous la liste de créatures sont incompréhensibles. Il faudrait au moins une bulle d'aide pour avoir une idée de ce qu'ils font. Qui plus est, même sur ma machine plutôt performante, il faut un gros paquet de secondes pour qu'ils réagissent. Ce n'est qu'après plusieurs manipulations que je me suis rendu compte que cela provoquait un changement de texte en haut de la liste (à l'opposé des boutons) pour expliquer le filtre qui avait conduit à la liste plus ou moins réduites de créatures. Le bouton de gauche ne provoque d'ailleurs aucun changement du nom de filtre en haut, alors que le filtre diffère des trois autres boutons, ce qui fait que le nom de filtre est alors faux.
L'ergonomie serait bien meilleure avec une combo box en haut de la liste, avec 4 choix correspondants aux quatre boutons actuels, et avec pour noms d'options ceux qui apparaissent en haut de la liste suite à l'application d'un filtre.
Quand je suis dans l'inventaire de 25SPELL, je vois ses points de vie, 70. Si je passe à AERIE12, le nombre de points de vie n'est pas rafraîchi et reste à 70, jusqu'à ce que je clique dessus et que cela ouvre la fenêtre de réglage des "caractéristiques principales" où la bonne valeur de 42 apparaît, et en quittant cette fenêtre, la valeur de 42 s'affiche alors correctement dans l'inventaire. Bref, il manque un rafraîchissement de la valeur quand on change de créature et qu'on est dans l'écran d'inventaire.
Quand j'utilise la recherche dans la liste d'équipement, en tapant épée puis Rechercher, j'obtiens un message d'erreur "L'indice texte 4294967295 est supérieur au nombre d'indices maximum (74107) existant sous X:\chemin d'install de l'éditeur\Mod dialogTLK\dialog.tlk.". D'une part, ce n'est pas très intéressant, mais d'autre part cette valeur correspond à -1. Je trouve bizarre que tu affiches ailleurs des messages du genre "texte non trouvé, index -1" et que là tu ne traites pas la valeur comme un -1 synonyme de valeur non définie.
Le fait de devoir effacer le champ "Nom objet" et cliquer sur Rechercher pour revenir à la liste complète après une recherche n'est pas intuitif.
Le déplacement d'objet dans l'inventaire n'est pas intuitif. J'ai tenté longtemps du glisser-déposer en tirant l'objet, en double-cliquant avec de chercher à glisser, en combinant avec les touches Shift, Alt ou Ctrl, sans succès. C'est par hasard que j'ai découvert qu'il se passait quelque chose quand je cliquais simplement sur un objet et qu'alors je pouvais le déplacer. N'est-il pas possible de faire un glisser-déposer, comme dans toute autre application ?
Le déplacement d'objet prévient qu'un objet est placé dans un emplacement incompatible. Mais pourquoi l'autoriser ?
Quand j'ajoute un objet (AMUL25) depuis la fenêtre de recherche d'équipement, puis que j'essaie de le déplacer, l'objet est bien mis au nouvel emplacement mais l'éditeur affiche une boite de message d'erreur "Dépassement de capacité lors de l'affectation" et le texte "Nom d'objet inconnu 'AMUL25'" apparaît dans la zone de texte au dessus du contenu du sac.
Mais cela n'empêche pas d'enregistrer la créature et de la recharger ensuite correctement.
Quand je modifie un fichier CRE du jeu et que je le renomme lors de l'enregistrement, la liste de fichiers CRE est mise à jour pour ajouter le nouveau nom, qui apparaît alors tout en haut de la liste de créatures. Néanmoins l'ascenseur de la liste n'est pas rafraîchi pour tenir compte de la position effective de la créature dans la liste. Donc mon AERIE12 renommée en M_AERIE fait passer M_AERIE en haut de la liste de créatures, juste avant MAEVAR, sauf que l'ascenseur me situe encore au début de la liste.
Quand je vais dans la partie sons de MAEVAR.CRE (pris au hasard), et que j'essaie d'écouter le son MAEVAR03, j'obtiens une boite de dialogue d'erreur
"Déplacement du fichier WAV décompressé échoué X:\chemin de l'éditeur\MAEVAR03.WAV vers X:\chemin de l'éditeur\Tmp\MAEVAR03.WAV
Détail de l'erreur:
Impossible de renommer le fichier <X:\chemin de l'éditeur\MAEVAR03.WAV> en <X:\chemin de l'éditeur\Tmp\MAEVAR03.WAV>.
Détail de l'erreur système : le fichier spécifié est introuvable"
La dernière ligne me met la puce à l'oreille que tu utilises une commande DOS pour renommer. Le chemin dans lequel j'ai installé l'éditeur comporte des espaces. Je suis prêt à parier que c'est le même problème que pour le lancement de WeiDU, il y a longtemps. Il faudrait que tu entoures les noms de guillemets pour éviter un problème d'espace dans l'appel d'une commande DOS. Si c'est bien le cas, je suis surpris que tu ne disposes pas d'une alternative pour renommer un fichier dans le langage de WinDev.
Dans la partie scripts et dialogue, j'ai plusieurs remarques :
- on ne distingue pas les scripts ou dialogues issus du répertoire Mod des fichiers venant des fichiers Biff du jeu (alors qu'on remarque un fichier de l'Override)
- on peut aller chercher un fichier qui se trouve n'importe où ailleurs que dans le jeu (Override) ou dans le répertoire Mod (celui proposé par défaut) : je suis allé dans l'override d'Icewind Dale, pour voir. J'ai donc créé un lien orphelin puisque le fichier n'existe ni dans le jeu, ni dans le mod. Pour bien faire, il faudrait que tu signales que la sélection effectuée pose problème et éventuellement proposer une solution, comme recopier le fichier choisi dans le répertoire Mod
Côté inventaire, j'ai aussi d'autres remarques :
- quand on affiche la description et qu'elle ne tient pas à l'écran, je trouverais plus logique que la molette de la souris fasse défiler le texte, plutôt que la liste de créatures sur la droite.
- je verrais bien un remplacement de la liste de créatures par la liste d'objets, quand tu es sur l'écran de l'inventaire. Intuitivement, j'ai envie d'aller piocher là plutôt que d'ouvrir le choix d'objets via un bouton en bas de l'écran
- quand j'ajoute un objet, il va forcément dans le sac, même si j'ai cliqué avant sur un autre emplacement
- quand je double-clique sur un objet ainsi ajouté dans le sac, j'ai un message d'erreur "Vous avez demandé à manipuler le fichier n°0 qui n'a pas été ouvert par fOuvre ou fCrée" qui me laisse pantois. Est-ce lié au fait d'avoir ajouté un objet puisque le double-clic ne provoque rien de particulier sur des objets qui étaient dans l'inventaire au chargement de la créature ?
- dans la fenêtre de recherche d'équipement l'utilisation des boutons << et >> pour masquer ou afficher la description est particulièrement surprenante, car partout ailleurs ces boutons servent à parcourir des listes.
- actuellement, la recherche d'équipement par type n'a pas l'air de fonctionner car aucun type n'est proposé dans la liste déroulante ? Bug ou fonction pas encore réalisée ?
Autres manques dans la gestion de l'inventaire
----------------------------------------------
Dans la liste d'objets d'une créature, chaque objet est associée à des valeurs de charge et à des flags (structure CRE V1.0 Items Table dans la description IESDP). Il y a au moins deux problèmes dans l'éditeur.
Il gère les charges, mais à condition de partir d'un objet existant déjà dans l'inventaire. Quand on ajoute un objet, il ne sait pas les gérer.
Quand j'ajoute des billes +3 à Aérie, on voit bien qu'aucun nombre n'apparaît dans la case de l'inventaire à côté de l'image. Quand je double-clique dessus, pour voir les charges, j'ai le message d'erreur "Dépassement de capacité lors de l'affectation" déjà signalé plus haut. Du coup, je suis obligé de sauvegarder pour que le jeu rafraîchisse l'inventaire et daigne cesser de m'afficher ce message d'erreur. Dès lors je peux éditer les charges. Sauf qu'elles sont toutes par défaut à 0, et que si j'ai le malheur de valider une valeur quantité 1 à 0, l'objet disparaît. On pourrait s'attendre à ce que la "quantité 1" soit à 1 dès qu'on ajoute un objet dans l'inventaire.
Au passage, cette valeur de quantité à 0 semble constituer le seul moyen de retirer un objet de l'inventaire. C'est on ne peut moins intuitif. Il manque clairement un bouton ou un menu pour supprimer un objet.
Un autre souci se pose avec un objet comme WAND05, la baguette de feu. Par structure, elle a deux fonctions, et chaque fonction possède un certain nombre de charges. Je voudrais donc lui attribuer des charges dans quantité 1 et quantité 2. Sauf que, comme pour toutes les baguettes semble-t-il (j'ai essayé givre, projectiles et foudre), je ne peux pas définir ses charges.
Par ailleurs l'éditeur ne permet pas du tout de gérer les flags, quelle que soit la situation. Et c'est gênant dès qu'il est question de faire des créatures pour autre chose que des PNJs (et même dans ce cas).
Les flags sont issus de flags qui existent dans la structure ITM et ils sont utilisés dans le fichier CRE afin de pouvoir surcharger la valeur habituelle du fichier ITM concerné.
Cette capacité à surcharger les flags a une grande utilité :
- bit 0: Identified ; indique si un objet est identifié ou non (en pratique, cela permet au jeu de tracer quand tu as identifié un objet)
- bit 1: Unstealable ; indique que l'objet ne pourra être pris au personnage par pick-pocket (c'est typiquement le flag qui manque aux anneaux qu'on peut si facilement voler à certains personnages, et aux cimeterres de Drizzt qu'on peut lui voler dans BG1)
- bit 2: Stolen ; indique que l'objet a été volé, ce qui fait qu'il sera refusé par la plupart des marchands (je ne sais pas si c'est vraiment utilisé dans des créatures, mais ça sert dynamiquement dans le jeu pour repérer les objets volés par le groupe)
- bit 3: Undroppable ; indique que l'objet ne tombera pas au sol quand le personnage sera tué (c'est très fréquemment utilisé dans pleins de créatures pour leur donner des anneaux qui leur apportent des bonus souvent liés à la race, ...)
L'absence de gestion des flags Unstealable et Undroppable est un problème car c'est beaucoup utilisé pour donner des objets à des créatures pour éviter qu'on leur pique leur équipement ou que tout leur équipement tombe à terre quand elles meurent, en particulier pour les anneaux, amulettes et autres griffes qui donnent des protections ou "armes naturelles" à différents monstres.
De même, l'indication d'identification permettrait d'éviter de créer un PNJ recrutable équipé d'un objet magique non identifié, qu'il lui serait donc impossible d'utiliser quand il rejoint le groupe (à moins de l'identifier ou d'avoir une connaissance suffisante).
Voilà, c'est un peu brut et pas vraiment organisé. J'ai essayé d'expliquer la façon dont je faisais apparaître les comportements bizarres, j'espère que ce sera suffisant pour comprendre.
Comme toujours, si tu as besoin d'éclaircissement sur mes remarques, n'hésite pas à demander.
Bonne continuation dans ton projet.