Tarot Redhand wrote...
Sorry about this but I think I just realised another (but at least in part, easier to solve) problem. It has to do with textures and other images within the CEP. The thing is that a number of models use the same texture or to put it another way one texture may be used by 2 or more models. Not only that but some outside projects (I'm thinking of the CCP here as an example) use textures from within the CEP and will not work properly without them.
So before any models and associated textures are stored, in whatever manner, I think someone will need to write some sort of program to go through all of the models to find out which textures they use and to produce a report on it so that fixing something in one place doesn't break something else that appeared to be working before. Not only that but it might be well mannered to include the CCP in this process. And that doesn't even cover the icons and portraits...
TR
I did a quick and dirty export of all textures from CEP 2.1 (the latest I have) - converting DDS to TGA. I did an md5sum on each image file and then just compared them to every other image file. I only found ~72 duplicated image files (ie. files that are named different but have the same data - I did spot check several of these visually to make sure....). I didn't calculate the amount of space/file sizes, but this probably isn't a whole lot of savings.
To help decode (since I did some shorthand), the number\\\\ (ie. 0\\\\) indicates CEP core0 file. So 1\\\\ indicates CEP core1 file and so on.
0\\\\c_trollwara_be.tga matches: 0\\\\c_trollwarb_be.tga,0\\\\c_trollwarc_be.tga,
0\\\\c_trollwara_fo.tga matches: 0\\\\c_trollwarb_fo.tga,
0\\\\c_trollwara_hl.tga matches: 0\\\\c_trollwarb_hl.tga,0\\\\c_trollwarc_hl.tga,
0\\\\c_trollwara_le.tga matches: 0\\\\c_trollwarb_le.tga,0\\\\c_trollwarc_le.tga,
0\\\\c_trollwarb_be.tga matches: 0\\\\c_trollwarc_be.tga,
0\\\\c_trollwarb_hl.tga matches: 0\\\\c_trollwarc_hl.tga,
0\\\\c_trollwarb_hr.tga matches: 0\\\\c_trollwarc_hr.tga,
0\\\\c_trollwarb_le.tga matches: 0\\\\c_trollwarc_le.tga,
0\\\\f_ayala_hair.tga matches: 1\\\\f_ayala_hair.tga,
0\\\\f_ayala_head.tga matches: 1\\\\f_ayala_head.tga,
0\\\\f_f_robe_001.tga matches: 1\\\\f_f_robe_001.tga,
0\\\\f_irb_fur.tga matches: 1\\\\f_irb_fur.tga,
0\\\\pdag_black.tga matches: 0\\\\wmb_blackback.tga,
0\\\\wmi_c1ar0100_r.tga matches: 0\\\\wmi_c1ar0100_r2.tga,
0\\\\wmi_c1ar0500.tga matches: 0\\\\wmi_c1ar0500_r.tga,
1\\\\aged_steel_dk.tga matches: 1\\\\aged_steel_dk_bu.tga,
1\\\\Ant_legs2.tga matches: 1\\\\c_wasp_legs2.tga,
1\\\\arthur_forer.tga matches: 1\\\\tyr_forer.tga,
1\\\\arthur_shinr.tga matches: 1\\\\tyr_shinr.tga,
1\\\\AShLw_RB.tga matches: 1\\\\texbuck.tga,
1\\\\bay_tail.tga matches: 1\\\\blackhrse_tail.tga,
1\\\\bzm_fore.tga matches: 1\\\\gzom_fore.tga,
1\\\\bzm_hands.tga matches: 1\\\\gzom_hands.tga,
1\\\\bzm_neck.tga matches: 1\\\\gzom_neck.tga,
1\\\\c_orca_frun.tga matches: 1\\\\c_orcb_frun.tga,
1\\\\c_pudding-wht.tga matches: 1\\\\c_slithtrack.tga,
1\\\\c_sf_Kakkuu.tga matches: 1\\\\c_sf_Spithriku.tga,
1\\\\c_visage.tga matches: 2\\\\c_shadow.tga,
1\\\\cc_gntfireadpa.tga matches: 1\\\\cc_gntfiresora.tga,
1\\\\cc_gntfireadpb.tga matches: 1\\\\cc_gntfiresorb.tga,
1\\\\cc_gntfireadpc.tga matches: 1\\\\cc_gntfiresorc.tga,
1\\\\cc_gntfrostadpa.tga matches: 1\\\\cc_gntfrostsora.tga,
1\\\\cc_gntfrostadpb.tga matches: 1\\\\cc_gntfrostsorb.tga,
1\\\\cc_gntfrostadpc.tga matches: 1\\\\cc_gntfrostsorc.tga,
1\\\\dk_water01.tga matches: 1\\\\water.tga,
1\\\\Drid_Abody.tga matches: 1\\\\Drid_FBodyC.tga,1\\\\Drid_Mbody-C.tga,
1\\\\Drid_ACbicep.tga matches: 1\\\\Drid_FbiceplA.tga,
1\\\\Drid_ACBody.tga matches: 1\\\\Drid_FBodyA.tga,1\\\\Drid_Mbody.tga,
1\\\\Drid_ACchest.tga matches: 1\\\\Drid_FchestA.tga,
1\\\\Drid_ACfhead.tga matches: 1\\\\Drid_FheadA.tga,
1\\\\Drid_ACfore.tga matches: 1\\\\Drid_FforerA.tga,
1\\\\Drid_AChand.tga matches: 1\\\\Drid_FhandrA.tga,
1\\\\Drid_AChelm.tga matches: 1\\\\Drid_Ahelm.tga,
1\\\\Drid_ACpelvis.tga matches: 1\\\\Drid_FpelvisA.tga,
1\\\\Drid_FBodyA.tga matches: 1\\\\Drid_Mbody.tga,
1\\\\Drid_FBodyC.tga matches: 1\\\\Drid_Mbody-C.tga,
1\\\\fleebitten_tail.tga matches: 1\\\\greyhrse_tail.tga,1\\\\whitehrse_tail.tga,
1\\\\fxpa_deawea_bla.tga matches: 2\\\\c_dea_staff.tga,
1\\\\fxpa_flame00.tga matches: pheno2\\\\fxpa_flame00.tga,
1\\\\fxpa_flamegd.tga matches: pheno2\\\\fxpa_flamegd.tga,
1\\\\gd_cav.tga matches: pheno2\\\\gd_cav.tga,
1\\\\greyhrse_tail.tga matches: 1\\\\whitehrse_tail.tga,
1\\\\leopardapp_tail.tga matches: 1\\\\quagga_tail.tga,
1\\\\lupinal_bicep.tga matches: 1\\\\lupinal_hoof.tga,1\\\\lupinal_shin.tga,
1\\\\lupinal_hoof.tga matches: 1\\\\lupinal_shin.tga,
1\\\\marl_tail3b.tga matches: 1\\\\marl_tail4b.tga,1\\\\marl_tail5b.tga,
1\\\\marl_tail3c.tga matches: 1\\\\marl_tail4c.tga,1\\\\marl_tail5c.tga,
1\\\\marl_tail4b.tga matches: 1\\\\marl_tail5b.tga,
1\\\\marl_tail4c.tga matches: 1\\\\marl_tail5c.tga,
1\\\\nm_cav.tga matches: pheno2\\\\nm_cav.tga,
1\\\\sella.tga matches: pheno2\\\\sella.tga,
1\\\\sella_1.tga matches: pheno2\\\\sella_1.tga,
2\\\\c_elemash.tga matches: 2\\\\c_elemsmoke.tga,
One thing that was more concerning is that in several cases the TGA version of a texture is in a higher order hak than the corresponding DDS version. For example c_ginger is found as a large DDS in CEP core 1, but the smaller TGA is found in CEP core 2. The ordering of the haks for CEP is descending so conetent in core 2 overrides core 1, etc. I don't know how that affects DDS versus TGA though since the engine is supposed to use DDS first. May require some testing.......