====== Création d'une icône d'objet ====== Dans l'inventaire de jeu, on visualise son matériel par le biais d'icônes qui s'entassent et/ou s'empilent dans son inventaire : {{ ajout_icone_01.jpg?direct&300 |}} Ces icônes sont fabriquées par le système qui assemble plusieurs éléments (quantité, qualité, couleur de fond etc.). {{ ajout_icone_06.jpg?direct&300 |}} Les informations ici sont génériques. \\ Nous avons une procédure dédiée à Khanat de génération des éléments d'interface : [[fr:generer_images_interface_khanat|Génération des graphismes d'interface de Khanat]] ===== Création d'un élément objet ===== Il existe un répertoire dans les assets libérés qui recense tous les objets équipables, du moins leurs icônes dans [[gitlab>https://branaz.khaganat.net/khaganat/khanat-assets/tree/master/database/interfaces|database/interfaces]]. Nous nous focalisons donc déjà sur les objets du type de "AR_pantabotte.png" dans l'exemple ci-dessus. Il suffit de se baser sur ces exemples pour en créer un nouveau. Le motif final devra être sous format .PNG, avec un fond transparent et d'une taille de 40x40 pixels. ===== Création du fichier d'interface ===== Les images utilisées pour l'interface sont assemblées en un seul fichier, nommé "new_texture_interfaces_dxtc" dans la version de Ryzom Core (le nom d'appel pouvant être changé, le nom du fichier aussi) auquel correspond un fichier texte descriptif "new_texture_interfaces_dxtc.txt". Il concentre une grande partie de ce qu'il faut pour générer les icônes. \\ Pour créer ces deux fichiers, il existe un binaire compilé dans les outils Ryzom Core : build_interface USAGE : build_interface [-s] [path_maps2] [path_maps3] .... -s : build a subset of an existing interface definition while preserving the existing texture ids, to support freeing up VRAM by switching to the subset without rebuilding the entire interface Il suffit donc d'entrer la commande en indiquant quel nom on veut donner à nos fichiers de sortie (un image et un d'index) et on indique chacun des répertoires à inclure dans l'image finale : $ build_interface mes_images_d_interface icones/outils icones/armes icones/armures icones/nourriture permet donc d'aller chercher toutes les images dans les sous-sous-répertoires de "icones" indiqués (l'outil ne parcourt pas les sous-répertoire par lui-même) et génère l'output suivant : \\ Writing tga file : mes_images_d_interface.tga \\ Writing UV file : mes_images_d_interface.txt Ces deux fichiers seront à fournir dans les .bnp du client. Il faut donc rassembler toutes les icônes dont on a besoin dans des sous-répertoire d'un répertoire interface et recréer cette image globale d'interface à chaque fois qu'on crée une nouvelle icône. \\ Ensuite, il ne reste qu'à appeler depuis le Datasheet le nom du fichier .png de l'icône de l'objet que l'on souhaite. Dans l'exemple ci-dessus, ce serait donc “AR_pantabotte.png”. ====== Outils : script perl pour extraire les icônes ====== Si jamais nous voulons retrouver les images d'un tel fichier composite, voici un petit script perl qui recrée automatiquement ces images icônes partir du fichier texture : #!/usr/bin/perl -w use strict; # S'assurer qu'il y a bien 4 argument my $num_args = $#ARGV + 1; if ($num_args != 4) { print "\nUsage: extractor tga_file txt_file tga_width tga_height\n"; exit; } my $tgafile=$ARGV[0]; # nom du fichier tga de texture my $txtfile=$ARGV[1]; # nom du fichier txt listant les icones my $w=$ARGV[2]; # largeur de l'image tga ( normalement 1024 ) my $h=$ARGV[3]; # hauteur de l'image tga ( normalement 1024 ) # fonction qui arrondit un nombre à la valeur entière la plus proche sub round { $_[0] > 0 ? int($_[0] + .5) : -int(-$_[0] + .5) } # Ouvrir le fichier txt pour lister les icones open(TXT, $txtfile) or die ("Coud not open the '$txtfile' file\n"); my $line ; foreach $line () { chomp $line ; # spliter une ligne en éléments séparés par des espaces my @array = split(/\s+/, $line); if ( scalar @array == 5 ) { my $iconname = $array[0]; # premier élément de la ligne, nom de l'icone my $x1 = round($array[1]*$w); # coin supérieur gauche ( x ) my $y1 = round($array[2]*$h); # coin supérieur gauche ( y ) my $x2 = round($array[3]*$w); # coin inférieur droit ( x ) my $y2 = round($array[4]*$h); # coin inférieur droit ( y ) my $ww = $x2-$x1+1 ; # largeur de l'image icone my $hh = $y2-$y1+1 ; # hauteur de l'image icone print "extraction de l'icone '$iconname' en ${ww}x${hh}+${x1}+${y1}\n" ; system ("convert -extract ${ww}x${hh}+${x1}+${y1} $tgafile $iconname") ; } else { print "invalid line : \"$line\"\n" ; } } **Utilisation :** \\ Lancez la commande dans le dossier où vous voulez recréer les icônes. Exemple, sur mon poste le fichier texture "texture_interfaces_v3.tga" ainsi que le fichier listant le icônes "texture_interfaces_v3.txt" sont dans le dossier "~/lirria/user/interface". la texture tga fait 1024x1024 pixels de largeur et de hauteur. $ mkdir mes_icones $ cd mes_icones $ ./extractor.pl ~/lirria/user/interface/texture_interfaces_v3.tga ~/lirria/user/interface/texture_interfaces_v3.txt 1024 1024 Attention, il faut que l'outil "convert" du paquet imagemagick soit installé sur le poste. **Note :** En plus des icones tga, il peut créer des fichiers spéciaux du à la présence de lignes avec des nom de fichiers bizarres et des tailles d'icônes nulles : r2ed_tool_draw_region_over.psd 0.000000000000 0.000000000000 0.000000000000 0.000000000000 r2ed_tool_split_road_over.psd 0.000000000000 0.000000000000 0.000000000000 0.000000000000 road_flag.max 0.000000000000 0.000000000000 0.000000000000 0.000000000000 road_flag.shape 0.000000000000 0.000000000000 0.000000000000 0.000000000000 **Note :** Il semble que ces lignes soient des erreurs, des fichiers "psd"(photoshop) ou des modèles 3d (.max et .shape) qui devaient traîner dans les dossiers des images lors de la création de la texture. Cela explique aussi les coordonnées 0 0 0 0, car l'outil n'arrivait pas à lire ces formats. Ces fichiers peuvent donc être supprimés. {{tag>Graphisme Interface Inventaire client_rc_obsolete Obsolète}}