Customisation des menus

Répondre
Partager Rechercher
Bonjour bonjour,

Suite à une discussion très intéressante avec Skanzo et Azrael07 sur le chan #NWN, je vais essayer de mettre ici le bilan de nos connaissances sur le sujet.

Bon. Le sujet est donc l'édition de l'ensemble des menus de NWN, des menus de création de personnage aux menus qui apparaissent au cours du jeu. Je crois que pratiquement tous les menus du jeu sont engendrés par des fichiers de type .gui, à part la feuille de personnage dont je n'ai pas trouvé le fichier correspondant. Ces fichiers se trouvent dans aurora_gui.bif (extractables avec Zviewer).

Un fichier .gui est un fichier GFF, qui marche donc par listes de variables répertoriées dans des entrées, etc.
Chaque élément du menu est défini par cette suite de variable :

*obj_caption [liste] (facultatif) : texte de l'élément (détail après)
*obj_layer [int >0, pair] : je ne suis pas sûr, mais je suppose que c'est la priorité de l'élément (devant / derrière les autres éléments)
*obj_locked [int =0] : aucune idée, toujours à 0
*obj_parent [string] : tag de la fenêtre de fond (cf. après)
*obj_parent_hook [string] : resref de la fenêtre
*obj_resref [string] (facultatif) : resref de l'élément (cf. après)
*obj_tag [string] : tag de l'élément (pas sûr de l'utilité, apparemment ça sert à attribuer des fonctions hardcodées aux éléments)
*obj_type [int] : type d'élément (cf. après)
*obj_x, _y, _z [float] : coordonnées de l'élément par rapport au centre de l'écran

Détail de obj_caption (peut-être incomplet ) :
*alignement horizontal/vertical avec l'élément [2 floats]
*couleur du texte [3 floats]
*StrRef du texte : référence au dialog.tlk dans le cas de textes statiques (exemple : "OK", "Fermer", etc.), sinon mystère dans le cas de textes dynamiques (mais dans ce cas changer la valeur n'a pas l'air d'influer en quoique ce soit sur ledit texte)

En ce qui me concerne, il reste quelques zones d'ombres, principalement au niveau du tag. Par exemple, j'ai essayé de supprimer la description dans le menu qui apparait lorsque l'on examine un objet. Cet élément portait le tag "Description". Dès que je changeait le tag, ou que je supprimais l'élément, le jeu plantait après examen d'un objet. J'en ai déduit que le code du jeu exigait qu'un élément taggé "Description" soit présent dans le menu pour que tout fonctionne.

Concernant le menu en lui même (la fenêtre de fond si vous préférez), voilà les variables qui le définissent :

*entrées des éléments [liste] (facultatif) : liste tous les éléments du menu, dont les index doivent être consécutifs, enfin je suppose
*obj_layer [int =0] : toujours à 0 dans le cas de la fenêtre de fond
*obj_locked [int =0] : idem
*obj_resref [string] : resref de la fenêtre
*obj_tag [string] : tag de la fenêtre
*obj_type [int =3] : type d'élement (cf. après) (3 dans le cas d'une fenêtre)
*obj_x, _y, _z [float] : coordonnées de la fenêtre par rapport au centre de l'écran

Ensuite vient la liste des différents types d'objet que j'ai répertorié jusque là (pas forcément exhaustive donc) :

0 = divers : barre de chargement, slots d'inventaire
1 = petite croix de fermeture (style windows)
3 = fenêtre de menu
5 = texte (statique ou dynamique)
8 = description, contenant le texte, l'évaluation de FP dans le cas d'une créature, etc. (ce type d'élément reste dur à modifier, puisque majoritairment hardcodé)
9 = bouton (avec texte statique ou dynamique)

Remarque : après reflexion, je suis à 99% sûr que le contenu d'un texte dynamique est choisi en fonction de son tag; par exemple, le texte qui s'affiche en haut de la fenêtre d'examen d'objet, porte le tag "Name" (et pas de resref) et affiche effectivement le nom de l'objet.

Enfin, les quelques resrefs que j'ai répertorié (liste sûrement pas exhaustive) :

*ctl_btn_pre_116 : bouton
*ctl_btn_pre_176 : bouton (un peu plus gros je crois)
*ctl_btn_x : croix de fermeture
*ctl_exam_item01 : description d'objet

Dans le cas de ces éléments précis, le resref est spécifié et est probablement indispensable (créer un élément de type 9, soit un bouton, sans préciser un des resrefs au dessus, peut donner des résultats imprévisibles). Même chose pour la description, supprimer le resref n'a amené qu'un joli plantage.

Dernière chose : l'ajout comme la suppression d'éléments non-cruciaux (cf. description) semble ne pas poser de problèmes si elle est faite avec rigueur. Par contre, le programme semble attribuer une fonction uniquement au premier bouton portant le tag qu'il attend; ainsi, une croix de fermeture que j'avais rajouté, alors qu'un autre était déjà là, n'était pas "cliquable" car aucune fonction ne lui était associée. (son index était supérieur à la croix de fermeture originale).
Au final, rajouter des éléments présente donc bien peu d'intérêt, à moins de maîriser parfaitement le fonctionnement des textes dynamiques (ce qui n'est pas mon cas ).

Quand j'aurais répertorié les différents tags associés à leurs fonctions respectives, je les posterais ici.

Voilà, fin du premier compte-rendu sur le sujet. Ca peut paraître un peu léger et surtout très flou, mais ça a demandé pas mal d'essais et de cafouillements

Avec tout ça, je pense qu'il est possible de créer un éditeur de menus rudimentaire. Les fonctions seraient principalement :
* modification des coordonnées d'éléments existants, de leur texte (statique uniquement), éventuellement de leur fonction
* rajout/suppression d'éléments
* euh... peut-être permettre de modifier la skin du menu, mais ça demanderait la liste des resref des menus associés à leurs images respectives

Bon, allez, j'ai fait mon devoir pour aujourd'hui Bonne nuit à tous
Comment fais t'on pour éditer ces fichiers .gui ?
J'arrive à obtenir quelque chose de lisible avec itptool mais je n'arrive pas à la retransformer en itp avec asc2itp, il me dis que j'ai une erreur alors que je n'ai pas modifié une seule ligne du fichier.
Y a t'il mieux qu'itptool pour éditer ces fichiers ?
Personellement, j'utilise GFF Editor, le prog utilisé en interne par Bioware. Cela dit, Leto est très bien, et il y a d'autres progs sur NWVault.

Mais ITPTool, enfin bon, voilà quoi
Je vais essayer le GFF editor car Leto ne me permet pas de mettre des valeurs négatives dans un champ FLOAT en mode Edition avancée. Dommage, il est bien pourtant.

EDIT: GFF editor marche très bien. En fait, Leto ne permet pas de mainpuler des FLOAT négatifs. Des valeurs peuvent être négatives mais ne peuvent pas être édité. Je pense que le - ne marche pas dans Leto.
moi.. je me prosternerais officiellement devant le premier qui me sort un moyen de virer la description des bonus/malus/autres des pj/pnj/objets et tous ce qui n'est pas la "simple" description de l'objet/pnj

(et voui je connais le hak qui cache ça en mettant un "plan" devant mais c'est pas efficace tous le temps....)
Si c'est le cas, j'ai fait quelque chose.
On ne peut plus voir que le nom et la photo de la personne (j'ai essayé qu'avec des pnj) quand on l'examine.
http://phpgratuit.free.fr/noexam.zip

Bon, vous regardez pas trop comment j'ai fait, c'est vraiment pas beau. J'ai juste viré la fenêtre qui affiche la description à un endroit où on peut pas la voir. Mais il n'y aura pas de problème de superposition, vu où elle doit être

En espérant que c'est ce que tu veux.

PS: on peut quand même examiner les objets, c'est grave ?
Pareil que Gariel. Je doute qu'il y ait de meilleure solution.

En fait le jeu rajoute lui-même les bonus/malus à la fin de la description, donc pas moyen de séparer les deux.
Répondre

Connectés sur ce fil

 
1 connecté (0 membre et 1 invité) Afficher la liste détaillée des connectés