Journal d'expérimentation
Aujourd'hui je voulais savoir comment réduire drastiquement la taille occupée par le dossier data de ryzom. L'idée est de se créer sa propre installation de khanat, sans les 1,5 Go de données du client officiel en fichier compresssé. Mon regard se tourne en premier vers le client ryzom core
http://sourceforge.net/projects/ryzom/files/ :
ryzom_setup_644.exe 1.5 GB
ryzom_client_open.7z 652.6 MB
Plus que 600 Mo, je le récupère et l'installe sur mon poste puis compare avec le dossier data du ryzom officiel.
Les fichiers packed_sheets (les data sheets) sont tous de tailles différentes, normal c'est ce qui devrait changer.
Les bnp (fichiers compressés contenant les modèles 3d et textures) sont tous les même (à une exception prêt).
Dans la version ryzom core, il manque les fichiers bnp des continent à savoir :
terre_*.bnp
zorai_*.bnp
tryker_*.bnp
sources_*.bnp
route_gouffre_*.bnp
primes_racines_*.bnp
nexus_*.bnp
matis_*.bnp
fyros_*
bagne_*
il ne reste que comme continent
newbieland_*.bnp
les fichiers bnp en relation avec le ring "r2_*.bnp" on également été supprimés :
r2_buffer.dat r2_forest_pz.bnp r2_lakes_pz.bnp
r2_desert2.bnp r2_jungle2.bnp r2_misc.bnp
r2_desert.bnp r2_jungle.bnp r2_roots2.bnp
r2_desert_maps.bnp r2_jungle_maps.bnp r2_roots.bnp
r2_desert_pz.bnp r2_jungle_pz.bnp r2_roots_maps.bnp
r2_forest2.bnp r2_lakes2.bnp r2_roots_pz.bnp
r2_forest.bnp r2_lakes.bnp
r2_forest_maps.bnp r2_lakes_maps.bnp
J'ai quelques idées pour supprimer encore plus de données
par exemple le gros de l'espace disque est représenté par les tenues :
54M characters_animations.bnp
77M characters_maps_fy_hof_armor00_hr.bnp
85M characters_maps_fy_hof_armor01_hr.bnp
6,7M characters_maps_fy_hof_caster01_hr.bnp
9,6M characters_maps_fy_hof_cheveux_hr.bnp
55M characters_maps_fy_hof_civil01_hr.bnp
17M characters_maps_fy_hof_underwear_hr.bnp
11M characters_maps_fy_hof_visage_hr.bnp
66M characters_maps_fy_hom_armor00_hr.bnp
67M characters_maps_fy_hom_armor01_hr.bnp
856K characters_maps_fy_hom_barman_hr.bnp
4,0K characters_maps_fy_hom_casque01_hr.bnp
8,1M characters_maps_fy_hom_caster01_hr.bnp
13M characters_maps_fy_hom_cheveux_hr.bnp
86M characters_maps_fy_hom_civil01_hr.bnp
2,1M characters_maps_fy_hom_ruflaket_hr.bnp
5,4M characters_maps_fy_hom_underwear_hr.bnp
11M characters_maps_fy_hom_visage_hr.bnp
135M characters_maps_hr.bnp
87M characters_maps_ma_hof_armor00_hr.bnp
32M characters_maps_ma_hof_armor01_hr.bnp
8,1M characters_maps_ma_hof_casque01_hr.bnp
8,1M characters_maps_ma_hof_caster01_hr.bnp
12M characters_maps_ma_hof_cheveux_hr.bnp
87M characters_maps_ma_hof_civil01_hr.bnp
17M characters_maps_ma_hof_underwear_hr.bnp
12M characters_maps_ma_hof_visage_hr.bnp
25M characters_maps_ma_hom_armor00_hr.bnp
33M characters_maps_ma_hom_armor01_hr.bnp
4,0K characters_maps_ma_hom_casque01_hr.bnp
8,1M characters_maps_ma_hom_caster01_hr.bnp
13M characters_maps_ma_hom_cheveux_hr.bnp
43M characters_maps_ma_hom_civil01_hr.bnp
11M characters_maps_ma_hom_underwear_hr.bnp
12M characters_maps_ma_hom_visage_hr.bnp
91M characters_maps_tr_hof_armor00_hr.bnp
39M characters_maps_tr_hof_armor01_hr.bnp
4,0K characters_maps_tr_hof_casque01_hr.bnp
6,7M characters_maps_tr_hof_caster01_hr.bnp
12M characters_maps_tr_hof_cheveux_hr.bnp
87M characters_maps_tr_hof_civil01_hr.bnp
11M characters_maps_tr_hof_refugee_hr.bnp
16M characters_maps_tr_hof_underwear_hr.bnp
11M characters_maps_tr_hof_visage_hr.bnp
64M characters_maps_tr_hom_armor00_hr.bnp
38M characters_maps_tr_hom_armor01_hr.bnp
4,0K characters_maps_tr_hom_casque01_hr.bnp
6,7M characters_maps_tr_hom_caster01_hr.bnp
13M characters_maps_tr_hom_cheveux_hr.bnp
96M characters_maps_tr_hom_civil01_hr.bnp
23M characters_maps_tr_hom_refugee_hr.bnp
8,6M characters_maps_tr_hom_underwear_hr.bnp
11M characters_maps_tr_hom_visage_hr.bnp
107M characters_maps_zo_hof_armor00_hr.bnp
122M characters_maps_zo_hof_armor01_hr.bnp
4,0K characters_maps_zo_hof_casque01_hr.bnp
6,7M characters_maps_zo_hof_caster01_hr.bnp
12M characters_maps_zo_hof_cheveux_hr.bnp
98M characters_maps_zo_hof_civil01_hr.bnp
22M characters_maps_zo_hof_underwear_hr.bnp
6,9M characters_maps_zo_hof_visage_hr.bnp
113M characters_maps_zo_hom_armor00_hr.bnp
104M characters_maps_zo_hom_armor01_hr.bnp
4,0K characters_maps_zo_hom_casque01_hr.bnp
7,1M characters_maps_zo_hom_caster01_hr.bnp
13M characters_maps_zo_hom_cheveux_hr.bnp
48M characters_maps_zo_hom_civil01_hr.bnp
11M characters_maps_zo_hom_underwear_hr.bnp
6,8M characters_maps_zo_hom_visage_hr.bnp
41M characters_shapes.bnp
1,2M characters_skeletons.bnp
8,0K characters_swt.bnp
« character_map_* » sont les textures des tenues. Il m'apparait que nous pouvons toutes les supprimer, ne gardant pour le moment que la tenue de refugié puis introduisant une à une nos tenues
Idem pour la faune
29M fauna_animations.bnp
112M fauna_maps.bnp
43M fauna_shapes.bnp
1,2M fauna_skeletons.bnp
4,0K fauna_swt.bnp
Pour le moment nous n'utilisons que le yubo, pourquoi garder toutes ces données inutiles ?
D'ailleurs de toute façon nous voulons revoir les principes de nommages des textures et shape et autres éléments. Il est donc préférable de tout réintroduire élément par élément en fonction des besoins et avec notre organisation de « fichiers » et « noms ». Cela permettrait entre autres de supprimer les références aux « noms » ryzomiens qui restent à mon sens propriétés de jeu ryzom même si les assets sont libres.
Mais avant de m'attaquer à tout cela, je voulais aussi revoir l'écran de sélection des personnages.
J'avais trouvé dans le dossier
« code/ryzom/common/data_leveldesign/leveldesign/Game_elem/CreatePerso » les datasheet définissant les caractéristiques des races de l'écran de création
$ ls
fyros_craftsman.starting_role matis_craftsman.starting_role _parent tryker.race_stats zorai.race_stats
fyros_fighter.starting_role matis_fighter.starting_role tryker_craftsman.starting_role zorai_craftsman.starting_role
fyros_harvester.starting_role matis_harvester.starting_role tryker_fighter.starting_role zorai_fighter.starting_role
fyros_magician.starting_role matis_magician.starting_role tryker_harvester.starting_role zorai_harvester.starting_role
fyros.race_stats matis.race_stats tryker_magician.starting_role zorai_magician.starting_role
Ces datasheets référencent ceux du dossier
« code/ryzom/common/data_leveldesign/leveldesign/Game_elem/Creature/Npc/parent/_basics_3D »
pour les modèles 3D utilisés. Ce qui fait qu'il est facile de changer « l'apparence » de ces races en éditant ces fichiers :
_basics_3D$ ls
_fyros_female.creature _homin_attack.creature _karavan_male.creature _matis_male.creature _tryker_male.creature _zorai_male.creature
_fyros_male.creature _karavan_female.creature _matis_female.creature _tryker_female.creature _zorai_female.creature
Mais voilà, ces fichiers permettent de définir les races de l'écran de création, mais pas d'indiquer au client la liste des races à proposer lors de la création. Je regarde dans le dossier « code/ryzom/common/data_leveldesign/primitives » qui doit contenir les définitions globales du jeu, mais je ne trouve aucune référence aux mots « fyros », « matis », etc... Alors je me rends du coté du canal #ryzom sur freenode et on m'oriente plutôt vers les fichiers xml de définition des écrans d''interface. C'est à dire dans :
« code/ryzom/client/data/gamedev/interfaces_v3 » qui correspond au contenu du fichier « gamedev.bnp » dans le dossier data du client
Mon but est simple, j'aimerai que nous repartions sur des races à nous. La première étape consiste à virer les races existantes et de n'en garder que 2 ( 2 pour gérer tous les aspects sélections ) et de diminuer de moitié la taille occupée par les assets des ces classes donc. Après des recherches, des tests, des « segmentation fault » en éditant les fichiers j'ai enfin trouvé la solution. Le fichier concerné s'appelle : « out_v2_appear.xml » qui décrit l'interface de l'écran de création des personnages :
J'ai finalement trouvé ligne 1840 et suivantes les boutons de la race « matis » et « tryker » dans le menu de création. Races que j'ai supprimé (oui c'est arbitraires ces deux races, mais fallait garder les zoraï pour les PNJ déjà présents, et j'ai un perso fyros sur mon serveur de test *tire la langue* ).
<ctrl style="opt_button" id="fyros_but" posref="TL TL" x="60" y="-88" hardtext="uiCP_Specie_Fyros"
onover="play_sound" params_over="name=specie_but_over"
onclick_l="proc" params_l="proc_select_specie|0"/>
<!-- remove the matis and tryker choice for species
<ctrl style="opt_button" id="matis_but" posparent="fyros_but" posref="BL TL" hardtext="uiCP_Specie_Matis"
onover="play_sound" params_over="name=specie_but_over"
onclick_l="proc" params_l="proc_select_specie|1"/>
<ctrl style="opt_button" id="tryker_but" posparent="matis_but" posref="BL TL" hardtext="uiCP_Specie_Tryker"
onover="play_sound" params_over="name=specie_but_over"
onclick_l="proc" params_l="proc_select_specie|2"/>
-->
<ctrl style="opt_button" id="zorai_but" posparent="fyros_but" posref="BL TL" hardtext="uiCP_Specie_Zorai"
onover="play_sound" params_over="name=specie_but_over"
onclick_l="proc" params_l="proc_select_specie|3"/>
<group id="logos" posref="TL TL" x="28" y="-80" h="380" w="44" >
<view type="bitmap" id="fyros" posref="TL TL" texture="opt_on_fyros.tga" global_color="false" />
<!--
<view type="bitmap" id="matis" posparent="fyros" y="" posref="BL TL" texture="opt_on_matis.tga" global_color="false" />
<view type="bitmap" id="tryker" posparent="matis" y="" posref="BL TL" texture="opt_on_tryker.tga" global_color="false" />
-->
<view type="bitmap" id="zorai" posparent="fyros" y="" posref="BL TL" texture="opt_on_zorai.tga" global_color="false" />
</group>
Au passage je trouve aussi comment ne garder qu'un seul fond, en l'occurence l'appartement fyros pour tous les écrans :
lignes 940 et suivantes :
<!-- Change Landscape -->
<action handler="set" cond="eq(@UI:TEMP:CHAR3D:PEOPLE,0)" params="target_property=ui:outgame:appear:char3d:env:name|value='outgame_fyros.ig'" />
<action handler="set" cond="eq(@UI:TEMP:CHAR3D:PEOPLE,1)" params="target_property=ui:outgame:appear:char3d:env:name|value='outgame_fyros.ig'" />
<action handler="set" cond="eq(@UI:TEMP:CHAR3D:PEOPLE,2)" params="target_property=ui:outgame:appear:char3d:env:name|value='outgame_fyros.ig'" />
<action handler="set" cond="eq(@UI:TEMP:CHAR3D:PEOPLE,3)" params="target_property=ui:outgame:appear:char3d:env:name|value='outgame_fyros.ig'" />
j'ai remplacé les « outgame_XXXX.ig » contenant les nom des fichiers 3D des apparts par ceux des fyros. Cela permettra d'avoir un client encore plus léger.
Résultat
Voila l'écran que l'appart est fyros malgré la création d'un personnage zoraï. De plus le menu de choix des races ne propose que « fyros » ou « zoraï ».
Cependant, j'ai eu un problème après ces tests :
Citation$ ./khanat_client-2013-12-17
HEY!
XML reading failed!
Interface XML reading failed!
Some XML files are corrupted and may have been removed.
Ryzom may need to be restarted to run properly.
Would you like to quit now?
(Y)es or (N)o ?N
Erreur de segmentation
Systématiquement, mon client plantait lors de la connexion après sélection du personnage. Comme j'avais édité par mal de fichiers lors de mes expériences, j'ai remis une installation de base avec le client open ryzom. Même résultat. Finalement je suis repassé sur l'installation officiel en appliquant ma modification et là plus de plantage.
A priori les datas du client_open_ryzom sont trop anciennes et ne fonctionnent pas avec notre serveur de test. Du coup j'ai recopié le dossier data du ryzom officile et j'ai supprimé manuellement tous les BNP retirés dans le client open_ryzom Cette fois cela fonctionne. Prochaines étapes, continuer à nettoyer les BNP pour fournir à Za un client occupant un espace minimum pour ceux ayant une bande passante réduite.
Pour les curieux, voila le fichier modifié de l'interface à copier dans le dossier "user" pour obtenir ce résultat ;
out_v2_appear.xmlNote : je n'ai fait que retirer les entrées du menu "matis" et "tyrker", le client continue de charger les données sur ces races pour le moment.