Outils du site

fr:creer_icone_objet

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 : Ces icônes sont fabriquées par le système qui assemble plusieurs éléments (quantité, qualité, couleur de fond etc.).

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 : 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 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 40×40 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<existing_uv_txt_name>] <out_tga_name> <path_maps1> [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 :

Script perl: extractor.pl

Script perl: extractor.pl

extractor.pl
#!/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 (<TXT>) {
  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 1024×1024 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.

fr/creer_icone_objet.txt · Dernière modification: 2017/01/25 21:37 par YannK